16GB RAM과 버스 오류가 발생하더라도 7.6GB의 메모리가 부족한 Arch Linux에서 처리


2

R에서 7.6GB 크기의 큰 메모리 청크를 사용하려고합니다. 내 시스템에는 16GB RAM이 있으므로 이것이 문제가 될 것으로 예상하지 않았습니다. 그러나 R은이를 방지하고이를 우회하려고하면 R 및 기타 여러 응용 프로그램 (웹 브라우저)의 대규모 충돌이 발생합니다. 시스템이 버스 문제를보고했지만 시스템이 결국 충돌 한 이후 정확한 오류 메시지가 표시되지 않습니다.

내 질문은 : 무슨 일이야? 이것을 방지하고 R (또는 다른 응용 프로그램)에 더 많은 메모리를 할당하려면 어떻게해야합니까?

이론적으로 사용 가능한 메모리가 아니라 얼마나 많은 메모리를 처리 할 수 ​​있는지와 관련이 있다고 생각합니다.

세부

R에서 더 큰 메모리 청크를 사용하려고 시도했습니다. 약 10 억 개의 항목이있는 행렬, 약 7.6GB입니다. R은 그 크기의 벡터 / 행렬을 쉽게 허용하지 않지만 왜 나에게 분명하지 않습니다. (그것은에서 발생 Error: cannot allocate vector of size 7.6 Gb하지만, R은 아마도 큰 벡터를 처리 할 수있는 등 bigmemory 같은 라이브러리가 있습니다). R 해석기에서 :

> library(bigmemory)
Loading required package: bigmemory.sri
> bx <- big.matrix(45070,45070)

 *** caught bus error ***
address 0x7ff75ffac000, cause 'non-existent physical address'

Traceback:
 1: .Call("bigmemory_CreateSharedMatrix", PACKAGE = "bigmemory",     row, col, colnames, rownames, typeLength, ini, separated)
 2: CreateSharedMatrix(as.double(nrow), as.double(ncol), as.character(colnames),     as.character(rownames), as.integer(typeVal), as.double(init),     as.logical(separated))
 3: big.matrix(45070, 45070)

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
Selection: 

따라서 R이 충돌했지만 2를 선택하고 종료를 취소하여 저장할 수 있습니다. 다시 시도하는 것이 현명하지는 않았지만 어쨌든 우리는 간다.

Selection: 2
Save workspace image? [y/n/c]: c
> bx <- big.matrix(45070,45070)
terminate called after throwing an instance of 'boost::interprocess::interprocess_exception'
  what():  No space left on device
Aborted (core dumped)

저널 로그에서 다음과 같습니다.

Aug 23 14:49:25 system systemd-coredump[426]: Process 423 (R) of user 1000 dumped core.

                                           Stack trace of thread 423:
                                           #0  0x00007ff94bab18c0 raise (libc.so.6)
                                           #1  0x00007ff94bab2f72 abort (libc.so.6)
                                           #2  0x00007ff94774d035 _ZN9__gnu_cxx27__verbose_terminate_handlerEv (libstdc++.so.6)
                                           #3  0x00007ff94774ac46 _ZN10__cxxabiv111__terminateEPFvvE (libstdc++.so.6)
                                           #4  0x00007ff947749b49 __cxa_call_terminate (libstdc++.so.6)
                                           #5  0x00007ff94774a538 __gxx_personality_v0 (libstdc++.so.6)
                                           #6  0x00007ff9474b3ee3 _Unwind_RaiseException_Phase2 (libgcc_s.so.1)
                                           #7  0x00007ff9474b470e _Unwind_Resume (libgcc_s.so.1)
                                           #8  0x00007ff945279da6 _ZN21SharedMemoryBigMatrix7destroyEv (bigmemory.so)
                                           #9  0x00007ff9452a7762 _Z15CreateRAMMatrixI21SharedMemoryBigMatrixEP7SEXPRECS2_S2_S2_S2_S2_S2_S2_ (bigmemory.so)
                                           #10 0x00007ff94528d79c bigmemory_CreateSharedMatrix (bigmemory.so)
                                           #11 0x00007ff94c11a33a n/a (libR.so)
                                           #12 0x00007ff94c11a8c6 n/a (libR.so)
                                           #13 0x00007ff94c158fb8 Rf_eval (libR.so)
                                           #14 0x00007ff94c15ba3b n/a (libR.so)
                                           #15 0x00007ff94c158d5b Rf_eval (libR.so)
                                           #16 0x00007ff94c15adce n/a (libR.so)
                                           #17 0x00007ff94c150963 n/a (libR.so)
                                           #18 0x00007ff94c158938 Rf_eval (libR.so)
                                           #19 0x00007ff94c15adce n/a (libR.so)
                                           #20 0x00007ff94c158b02 Rf_eval (libR.so)
                                           #21 0x00007ff94c15cbc7 n/a (libR.so)
                                           #22 0x00007ff94c158d5b Rf_eval (libR.so)
                                           #23 0x00007ff94c181f92 Rf_ReplIteration (libR.so)
                                           #24 0x00007ff94c1823b1 n/a (libR.so)
                                           #25 0x00007ff94c182468 run_Rmainloop (libR.so)
                                           #26 0x000000000040074b main (R)
                                           #27 0x00007ff94ba9e4ca __libc_start_main (libc.so.6)
                                           #28 0x000000000040078a _start (R)
-- Subject: Process 423 (R) dumped core
-- Defined-By: systemd
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- Documentation: man:core(5)
-- 
-- Process 423 (R) crashed and dumped core.
-- 
-- This usually indicates a programming error in the crashing program and
-- should be reported to its vendor as a bug.

시스템 전체의 결과

현재 데스크탑 환경이나 그래픽 응용 프로그램이 실행되고 있지 않았습니다. 무슨 일이 있었는지 찾아보기 위해 창 관리자와 브라우저를 시작했습니다. 공포로, Firefox 나 Opera 또는 Chromium이 시작되지 않는다는 것을 알았습니다. 오류 메시지가 버스 오류에 대해 말했지만 시스템이 결국 충돌 한 이후 정확한 오류 메시지가 없습니다. libreoffice와 같은 더 큰 응용 프로그램과 같은 다른 응용 프로그램도 문제없이 시작할 수 있습니다. 네트워크 연결을 설정하는 데 필요한 주소와 관련이있을 수 있습니까? R이 충돌 한 후 시스템의 주소가 잘못되었을 수 있습니까? 그러나 R 프로세스가 종료 된 후에도 이것이 지속되는 이유를 이해하지 못합니다.

저널 로그에서 다음과 같이 보입니다 (긴 스택 추적이 잘림).

Aug 23 15:16:19 system systemd-coredump[18050]: Process 18017 (firefox) of user 1000 dumped core.

                                             Stack trace of thread 18017:
                                             #0  0x00007ff72e679018 sem_init@@GLIBC_2.2.5 (libpthread.so.0)
                                    (...)

Aug 23 15:16:20 system systemd-coredump[18097]: Process 18062 (firefox) of user 1000 dumped core.

                                             Stack trace of thread 18062:
                                             #0  0x00007f2098a98018 sem_init@@GLIBC_2.2.5 (libpthread.so.0)
                                    (...)

Aug 23 15:16:21 system systemd-coredump[18144]: Process 18109 (firefox) of user 1000 dumped core.

                                             Stack trace of thread 18109:
                                             #0  0x00007f2d45410018 sem_init@@GLIBC_2.2.5 (libpthread.so.0)
                                    (...)
                                    (...)
                                    (...)

Aug 23 15:19:16 system systemd-coredump[19510]: Process 19370 (opera) of user 1000 dumped core.

                                             Stack trace of thread 19395:
                                             #0  0x0000000001c882f7 n/a (opera)
                                             #1  0x0000000001c890e9 n/a (opera)
                                    (...)

Aug 23 15:20:58 system systemd-coredump[20140]: Process 20136 (evas_image_load) of user 1000 dumped core.

                                             Stack trace of thread 20136:
                                             #0  0x00007fba4432babd __memset_avx2_erms (libc.so.6)
                                    (...)

Aug 23 15:30:11 system systemd-coredump[20990]: Process 20958 (WebKitWebProces) of user 1000 dumped core.

                                             Stack trace of thread 20958:
                                             #0  0x00007fc5dd5ed7d0 n/a (libpixman-1.so.0)
                                             #1  0x00007fc5dd5d273b n/a (libpixman-1.so.0)
                                    (...)

Aug 23 15:31:07 system systemd-coredump[22406]: Process 20936 (midori) of user 1000 dumped core.

                                             Stack trace of thread 22403:
                                             #0  0x00007f3a38d5b6df __memmove_avx_unaligned_erms (libc.so.6)
                                             #1  0x00007f3a39759e78 n/a (libwebkit2gtk-4.0.so.37)

그런 다음 dbus를 다시 시작하려고 시도했습니다 (이것은 가장 똑똑한 움직임이 아니었고 시스템을 추락했습니다).

다른 측면들

시스템이 충돌하기 전에 다음 사항도 깨달았습니다.

[user@system ~]$ df -h
Filesystem         Size  Used Avail Use% Mounted on
dev                7.6G     0  7.6G   0% /dev
run                7.6G  788K  7.6G   1% /run
/dev/mapper/root   412G   89G  324G  22% /
tmpfs              7.6G  7.6G     0 100% /dev/shm
tmpfs              7.6G     0  7.6G   0% /sys/fs/cgroup
/dev/sda1          2.0G   52M  1.8G   3% /boot
tmpfs              7.6G     0  7.6G   0% /tmp
tmpfs              1.6G     0  1.6G   0% /run/user/1000
[user@system ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15469         146        7438        7735        7884        7349
Swap:         14335           0       14335
[user@system ~]$ 

가상 파일 시스템 (dev, run, tmpfs)의 크기가 모두 7.6GB 인 이유는 무엇이며 R이 할당하지 않는 것입니까?

R에 6.7GB를 할당 할 수 있지만 7.6GB 이하에 제한이 있음을 확인했습니다. R 또는 시스템에 최대 메모리가 설정되어 있지 않습니다.

[user@system ~]$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 61833
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 99
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 61833
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

... 및 R 해석기에서 :

> Sys.getenv("R_MAX_MEM_SIZE")
[1] ""
> Sys.getenv()
COLUMNS                 235
DBUS_SESSION_BUS_ADDRESS
                        unix:path=/run/user/1000/bus
DESKTOP                 Enlightenment
DISPLAY                 :0.0
E_BIN_DIR               /usr/bin
E_CONF_PROFILE          standard
E_DATA_DIR              /usr/share/enlightenment
E_ICON_THEME            gnome
E_IPC_SOCKET            /run/user/1000/e-user@0/633
E_LIB_DIR               /usr/lib
E_LOCALE_DIR            /usr/share/locale
E_PREFIX                /usr
E_RESTART               1
E_SCALE                 1.000
E_START                 enlightenment_start
E_START_TIME            1503499246.8
E_TAINTED               NO
EDITOR                  vi
HOME                    /home/user
LANG                    en_GB.UTF-8
LD_LIBRARY_PATH         /usr/lib64/R/lib:/usr/lib/jvm/java-7-openjdk/jre/lib/amd64/server
LINES                   58
LN_S                    ln -s
LOGNAME                 user
M2                      /opt/maven//bin
M2_HOME                 /opt/maven/
MAIL                    /var/spool/mail/user
MAKE                    make
MAVEN_OPTS              -Xmx512m
MOZ_PLUGIN_PATH         /usr/lib/mozilla/plugins
PAGER                   /usr/bin/less
PANTS                   ON
PATH                    /opt/maven//bin:/home/user/Applications/.bin:/usr/bin:/opt/maven//bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
PWD                     /home/user
QT_QPA_PLATFORMTHEME    gtk2
QT_STYLE_OVERRIDE       gtk2
R_ARCH                  
R_BROWSER               /usr/bin/xdg-open
R_BZIPCMD               /usr/bin/bzip2
R_DOC_DIR               /usr/share/doc/R/
R_GZIPCMD               /usr/bin/gzip
R_HOME                  /usr/lib64/R
R_INCLUDE_DIR           /usr/include/R/
R_LIBS_SITE             
R_LIBS_USER             ~/R/x86_64-pc-linux-gnu-library/3.4
R_PAPERSIZE             a4
R_PDFVIEWER             /usr/bin/xdg-open
R_PLATFORM              x86_64-pc-linux-gnu
R_PRINTCMD              
R_RD4PDF                times,inconsolata,hyper
R_SESSION_TMPDIR        /tmp/RtmpXBvepb
R_SHARE_DIR             /usr/share/R/
R_SYSTEM_ABI            linux,gcc,gxx,gfortran,?
R_TEXI2DVICMD           /usr/bin/texi2dvi
R_UNZIPCMD              /usr/bin/unzip
R_ZIPCMD                /usr/bin/zip
SED                     /usr/bin/sed
SHELL                   /bin/bash
SHLVL                   3
TAR                     /usr/bin/tar
TERM                    xterm
USER                    user
WINDOWPATH              1
XAUTHORITY              /home/user/.Xauthority
XDG_CONFIG_DIRS         /usr/etc/xdg:/etc/xdg
XDG_DATA_DIRS           /usr/share/enlightenment:/usr/share:/usr/local/share:/usr/share
XDG_MENU_PREFIX         e-
XDG_RUNTIME_DIR         /run/user/1000
XDG_SEAT                seat0
E_PREFIX                /usr
E_RESTART               1
E_SCALE                 1.000
E_START                 enlightenment_start
E_START_TIME            1503499246.8
E_TAINTED               NO
EDITOR                  vi
HOME                    /home/user
LANG                    en_GB.UTF-8
LD_LIBRARY_PATH         /usr/lib64/R/lib:/usr/lib/jvm/java-7-openjdk/jre/lib/amd64/server
LINES                   58
LN_S                    ln -s
LOGNAME                 user
M2                      /opt/maven//bin
M2_HOME                 /opt/maven/
MAIL                    /var/spool/mail/user
MAKE                    make
MAVEN_OPTS              -Xmx512m
MOZ_PLUGIN_PATH         /usr/lib/mozilla/plugins
PAGER                   /usr/bin/less
PANTS                   ON
PATH                    /opt/maven//bin:/home/user/Applications/.bin:/usr/bin:/opt/maven//bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
PWD                     /home/user
QT_QPA_PLATFORMTHEME    gtk2
QT_STYLE_OVERRIDE       gtk2
R_ARCH                  
R_BROWSER               /usr/bin/xdg-open
R_BZIPCMD               /usr/bin/bzip2
R_DOC_DIR               /usr/share/doc/R/
R_GZIPCMD               /usr/bin/gzip
R_HOME                  /usr/lib64/R
R_INCLUDE_DIR           /usr/include/R/
R_LIBS_SITE             
R_LIBS_USER             ~/R/x86_64-pc-linux-gnu-library/3.4
R_PAPERSIZE             a4
R_PDFVIEWER             /usr/bin/xdg-open
R_PLATFORM              x86_64-pc-linux-gnu
R_PRINTCMD              
R_RD4PDF                times,inconsolata,hyper
R_SESSION_TMPDIR        /tmp/RtmpXBvepb
R_SHARE_DIR             /usr/share/R/
R_SYSTEM_ABI            linux,gcc,gxx,gfortran,?
R_TEXI2DVICMD           /usr/bin/texi2dvi
R_UNZIPCMD              /usr/bin/unzip
R_ZIPCMD                /usr/bin/zip
SED                     /usr/bin/sed
SHELL                   /bin/bash
SHLVL                   3
TAR                     /usr/bin/tar
TERM                    xterm
USER                    user
WINDOWPATH              1
XAUTHORITY              /home/user/.Xauthority
XDG_CONFIG_DIRS         /usr/etc/xdg:/etc/xdg
XDG_DATA_DIRS           /usr/share/enlightenment:/usr/share:/usr/local/share:/usr/share
XDG_MENU_PREFIX         e-
XDG_RUNTIME_DIR         /run/user/1000
XDG_SEAT                seat0
XDG_SESSION_ID          c1
XDG_VTNR                1
XMODIFIERS              @im=ibus

소프트웨어

R 버전은 3.4.1입니다. 시스템은 아치 리눅스입니다.

[user@system ~]$ uname -a
Linux system 4.11.9-1-ARCH #1 SMP PREEMPT Wed Jul 5 18:23:08 CEST 2017 x86_64 GNU/Linux

답변:


3

이것은 내가 감사에 동의하지 않는 아주 적은 경우 중 하나입니다 .

그 이유는 / dev / shm을 채우는 것은 다른 프로세스에 의한 것이 아니기 때문에 R 패키지에서 쉽게 사용할 수 있도록하는 것이 아니라 대신 R 자체 의 big.memory 모듈 에 의한 것입니다! 따라서 / dev / shm을 해제하는 것은 R 을 죽이는 것과 같습니다 .

bigmemory 패키지 매뉴얼 상태, 1 페이지 :

설명 : 대규모 행렬을 생성, 저장, 액세스 및 조작합니다. 행렬은 공유 메모리에 할당되며 메모리 매핑 된 파일을 사용할 수 있습니다.

이것은 중요한 점을 분명히합니다. big.memory 를 사용하여 모든 메모리를 사용할 것으로 예상 할 수 없으며 / dev / shm에 할당 된 부분 만 사용합니다 . 이는 일반적으로 사용 가능한 총 메모리의 절반입니다. shm 을 확대 또는 축소 하려면 / etc / fstab 에서 관련 줄을 수정 하고 다시 부팅하십시오.

/ dev / shm을 채우는 것은 R 때문 이라고 안전하게 가정 할 수 있습니다 . 실제로 OP 게시물에는 당시에 다른 프로그램이 실행되지 않았다고 명시되어 있습니다.

현재 데스크탑 환경이나 그래픽 응용 프로그램이 실행되고 있지 않았습니다.

따라서 다른 것 ( , R 과는 별개 )이 그렇게 큰 공유 메모리 덩어리를 삼킬 수 있을지 상상하기가 어렵 습니다.

사실, 문제의 근원을 이해하는 것도 쉽습니다. 우선, 매트릭스

bx <-big.matrix (45070,45070)

보유 45,070 45,070 X > 2 억 요소. 둘째, R 매뉴얼에 따라

R에는 단 정밀도 데이터 유형이 없습니다. 모든 실수는 배정도 형식으로 저장됩니다

그리고

모든 R 플랫폼은 IEC 60559 (IEEE 754라고도 함) 표준을 준수하는 값으로 작동해야합니다.

....

IEEE 754-2008 / IEC60559 : 2011에서는이를 'binary64'형식이라고합니다.

binary64 형식의 Wikipedia 기사는 다음같이 명확하게 설명합니다.

배정 밀도 부동 소수점 형식은 컴퓨터 메모리에서 8 바이트 (64 비트)를 차지하는 컴퓨터 번호 형식입니다.

따라서 각각 8 바이트를 차지하는 20 억 개 이상의 요소는 160 억 바이트 이상의 메모리를 차지하려고합니다.이 크기는 / dev / shm ( 대용량 메모리 가 저장하려는 위치의 두 배입니다) )이 있습니다. 따라서 충돌 및 오류 메시지 :

'boost :: interprocess :: interprocess_exception'의 인스턴스를 던진 후 종료가 호출됩니다. what () : 장치에 남은 공간이 없습니다.

이 오류 메시지는에서 부스트 C ++ 라이브러리 , 관련된 기능을하는의 클래스 :

Boost.Interprocess는 공유 메모리 객체 및 파일 매핑을 생성하고 매핑 가능한 클래스를 프로세스의 주소 공간에 매핑하는 몇 가지 기본 클래스를 제공합니다.

R 코어 덤프 이후의 시스템 장애/ dev / shm 이 정리되지 않았으며 공유 메모리를 사용하는 모든 프로세스 (예 : 동적 라이브러리를 사용하는 모든 프로세스)가 실패 한다는 점에서 grawity 에 의해 잘 설명되어 있습니다. 장치 공간 부족 : 가장 쉬운 방법은 재부팅하는 것입니다.

당신의 선택은 무엇입니까? 먼저, 32GiB의 메모리를 설치할 수 있으며, 이는 현재의 어려움을 무너 뜨릴 수 있습니다. 또는 행렬에 실제로 너무 많은 요소가 필요한지 확인할 수 있습니다. 예를 들어 대칭 행렬에는 비대칭 행렬의 요소 중 절반 이상이 포함되어 있으며 / dev / shm 을 조금만 확대 하면됩니다. . 또는 희소 행렬을 다룰 때 대칭 행렬보다 압축하기가 훨씬 쉽습니다.

다시 말해, 매트릭스의 세부 사항 중 일부를보고 구체적인 상황에 맞는 솔루션을 찾아야합니다.


"버스 프로세스"란 무엇입니까?
grawity

아 알 겠어요 그러나 ... 라이브러리가 메모리에서 공유 되더라도 / dev / shm과는 전혀 관련이 없습니다. 커널은 직접 페이징을 사용합니다. / dev / shm 폴더는 POSIX "shm"IPC 기능을위한 것입니다.
grawity

아 알 겠어요 그러나 ... 라이브러리가 메모리에서 공유 되더라도 / dev / shm과는 전혀 관련이 없습니다. 커널은 직접 페이징을 사용합니다. / dev / shm 폴더는 POSIX "shm"IPC 기능을위한 것입니다.
grawity

3

tmpfs 파일 시스템은 필요에 따라 커지므로 "총 크기"는 용량 제한에 불과합니다 . 마운트시 다르게 지정하지 않는 한 기본 제한은 실제 메모리의 50 %입니다. (이것은 tmpfs가 실제 메모리에 잠겨 있다는 것을 의미하지는 않으며 교체 할 있습니다.)

그러나 하나의 파일 시스템에서는 /dev/shm7.6GB가 사용 되었다고 보고합니다 (즉, 한계까지 채워짐). 이 위치는 SHM 세그먼트 (공유 메모리 – 프로세스 간 통신 기능)가 유지되는 곳이지만 때로는 프로그램에서 기타 파일을 직접 생성하기도합니다.

SHM 세그먼트는 영구적입니다. 프로그램을 명시 적으로 제거하지 않고 종료되면 그대로 유지됩니다. 따라서 이전 실행에서 SHM을 설정 한 다음 충돌이 발생하면 RAM의 절반을 쉽게 채우고 새로운 프로그램에 ~ 8GB 만 남겨 둘 수 있습니다.

(그리고 그 반대의 경우도 기본 /dev/shm메모리 용량은 물리적 메모리의 50 %이므로 모든 SHM 세그먼트의 총 크기는 7.6GB로 제한됩니다.이 점과 관련이 있는지 의심됩니다. 큰.)

/ dev / shm을 정리하려면 a) 재부팅하거나 b) plain old를 사용하여 찾은 파일을 조심스럽게 제거하십시오 rm. 그러나 먼저 사용 lsof하지 않도록 항상 사용 하십시오.

또는 다음을 사용하여 크기 제한을 늘리십시오.

mount -o remount,size=90% /dev/shm

(부수적으로, 당신은 linux-lts를 실행하지 않는 한 아치 리눅스를 위해 다소 오래된 커널을 실행하고 있습니다. 현재 버전은 4.12.8입니다.)


"요구에 따라 증가" /run는 질문에 나열된 파일 시스템에 788KB (+ 약간의 오버 헤드)의 메모리 만 있으면 된다는 것을 의미합니다 . tmpfs 인스턴스는 대부분 무엇이든 무료로 제공됩니다.
다니엘 B

bigmemory 패키지는 실제로 :이 완전히 정확하지 믿고 않는 큰 행렬의 처리를 위해 공유 메모리를 사용하고이 위기에 채우고, 궁극적으로 충돌이 발생하는 것이다. pls는 내 대답을 아래에서 읽습니다.
MariusMatutiae
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.