Linux는 전체 스왑 영역을 사용하며 사용 가능한 RAM이 충분하면 응답하지 않습니다.

Linux는 전체 스왑 영역을 사용하며 사용 가능한 RAM이 충분하면 응답하지 않습니다.

최근에 이상한 문제가 발생했습니다.

때로는(의도적으로 재현할 수 없음) 사용 가능한 RAM이 충분함에도 불구하고 시스템이 스왑 공간을 모두 사용하는 경우가 있습니다. 이런 일이 발생하면 시스템은 몇 분 동안 응답하지 않게 되고 OOM 킬러는 별로 도움이 되지 않는 "무작위" 프로세스를 종료하거나 X 서버를 종료합니다. "무작위" 프로세스를 종료하면 시스템은 응답하지 않습니다(여전히 스왑 공간은 없지만 여유 RAM이 많음). X를 종료하면 스왑 영역이 해제되고 시스템이 다시 응답하게 됩니다.

free 발생 시 출력:

$ free -htl
              total        used        free      shared  buff/cache   available
Mem:           7.6G        1.4G         60M        5.7G        6.1G        257M
Low:           7.6G        7.5G         60M
High:            0B          0B          0B
Swap:          3.9G        3.9G          0B
Total:          11G        5.4G         60M

이름-a:

Linux fedora 4.4.7-300.fc23.x86_64 #1 SMP Wed Apr 13 02:52:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

교환성:

cat /proc/sys/vm/swappiness 
5

dmesg의 관련 섹션:http://pastebin.com/0P0TLfsC

임시 파일 시스템:

$ df -h -t tmpfs
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           3.8G  1.5M  3.8G   1% /dev/shm
tmpfs           3.8G  1.7M  3.8G   1% /run
tmpfs           3.8G     0  3.8G   0% /sys/fs/cgroup
tmpfs           3.8G  452K  3.8G   1% /tmp
tmpfs           776M   16K  776M   1% /run/user/42
tmpfs           776M   32K  776M   1% /run/user/1000

메모리 정보: http://pastebin.com/CRmitCiJ

상단 -o SHR -n 1
미션: 총 231개, 달리기 1개, 수면 230개, 정지 0개, 좀비 0개
%Cpu(들): 8.5 us, 3.0 sy, 0.3 ni, 86.9 id, 1.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB 메모리: 총 7943020개, 무료 485368개, 사용됨 971096개, 버프/캐시 6486556개
교환된 KiB: 총 4095996개, 무료 1698992개, 사용된 2397004개. 989768 사용 가능한 메모리

  PID 사용자 PR NI VIRT RES SHR S %CPU %MEM TIME+ 명령                                             
 2066 mkamlei+ 20 0 8342764 163908 145208 S 0.0 2.1 0:59.62 Xorg                                                
 2306 mkamlei+ 20 0 1892816 138536 27168 S 0.0 1.7 1:25.47 노움 껍데기                                         
 3118 mkamlei+ 20 0 596392 21084 13152 S 0.0 0.3 0:04.86 그놈 터미널 -                                     
 1646 gdm 20 0 1502632 60324 12976 S 0.0 0.8 0:01.91 그놈 쉘                                         
 2269 mkamlei+ 20 0 1322592 22440 8124 S 0.0 0.3 0:00.87 그놈 설정-                                     
  486 루트 20 0 47048 8352 7656 S 0.0 0.1 0:00.80 시스템 로그                                     
 2277 메캄레+ 9 -11 570512 10080 6644 S 0.0 0.1 0:15.33                                          
 2581 mkamlei+ 20 0 525424 19272 5796 S 0.0 0.2 0:00.37 적색편이 gtk                                        
 1036 루트 20 0 619016 9204 5408 S 0.0 0.1 0:01.70 네트워크 관리자                                      
 1599 gdm 20 0 1035672 11820 5120 S 0.0 0.1 0:00.28 gnome-setup-                                     
 2386 mkamlei+ 20 0 850856 24948 4944 S 0.0 0.3 0:05.84 고아 데몬                                          
 2597 mkamlei+ 20 0 1138200 13104 4596 S 0.0 0.2 0:00.28 진화 경보                                     
 2369 mkamlei+ 20 0 1133908 16472 4560 S 0.0 0.2 0:00.49 진화 소스                                     
 2529 mkamlei+ 20 0 780088 54080 4380 S 0.0 0.7 0:01.14 그놈 소프트웨어                                      
 2821 mkamlei+ 20 0 1357820 44320 4308 S 0.0 0.6 0:00.23 진화력                                     
 2588 mkamlei+ 20 0 1671848 55744 4300 S 0.0 0.7 0:00.49 진화력                                     
 2525 mkamlei+ 20 0 613512 8928 4188 S 0.0 0.1 0:00.19 abrt 애플릿                                         

IPC:

[mkamleithner@fedora ~]$ ipcs -m -t

------공유 메모리 연결/분리/변경 시간-------
shmid 소유자 추가 분리가 변경됨             
294912 mkamleithn 4월 30일 20:29:16 설정되지 않음 4월 30일 20:29:16     
393217 mkamleithn 4월 30일 20:29:19 4월 30일 20:29:19 4월 30일 20:29:17     
491522 mkamleithn 4월 30일 20:42:21 4월 30일 20:42:21 4월 30일 20:29:18     
524291 mkamleithn 4월 30일, 20:38:10 4월 30일, 20:38:10 4월 30일, 20:29:18     
786436 mkamleithn 4월 30일 20:38:12 설정되지 않음 4월 30일 20:38:12     

[mkamleithner@fedora ~]$ ipcs

------ 메시지 대기열---------
주요 msqid 소유자 권한은 바이트 메시지를 사용했습니다.    

------공유 메모리 세그먼트---------
키 shmid 소유자 권한 바이트 nattch 상태      
0x00000000 294912 mkamleithn 600 524288 2 대상         
0x00000000 393217 mkamleithn 600 2576 2 목적지         
0x00000000 491522 mkamleithn 600 4194304 2 대상         
0x00000000 524291 mkamleithn 600 524288 목적지 2개         
0x00000000 786436 mkamleithn 600 4194304 2 대상         

------세마포어 배열--------
주요 semid 소유자 권한 nsems     

[mkamleithner@fedora ~]$ ipcs -m -t

------공유 메모리 연결/분리/변경 시간-------
shmid 소유자 추가 분리가 변경됨             
294912 mkamleithn 4월 30일 20:29:16 설정되지 않음 4월 30일 20:29:16     
393217 mkamleithn 4월 30일 20:29:19 4월 30일 20:29:19 4월 30일 20:29:17     
491522 mkamleithn 4월 30일 20:42:21 4월 30일 20:42:21 4월 30일 20:29:18     
524291 mkamleithn 4월 30일, 20:38:10 4월 30일, 20:38:10 4월 30일, 20:29:18     
786436 mkamleithn 4월 30일 20:38:12 설정되지 않음 4월 30일 20:38:12     

[mkamleithner@fedora ~]$ sudo grep 786436 /proc/*/maps
/proc/2084/maps:7ff4a56cc000-7ff4a5acc000 rw-s 00000000 00:05 786436 /SYSV00000000 (삭제됨)
/proc/3984/maps:7f4574d00000-7f4575100000 rw-s 00000000 00:05 786436 /SYSV00000000 (삭제됨)
[mkamleithner@fedora ~]$ sudo grep 524291 /proc/*/maps
/proc/2084/maps:7ff4a4593000-7ff4a4613000 rw-s 00000000 00:05 524291 /SYSV00000000 (삭제됨)
/proc/2321/maps:7fa9b8a67000-7fa9b8ae7000 rw-s 00000000 00:05 524291 /SYSV00000000 (삭제됨)
[mkamleithner@fedora ~]$ sudo grep 491522 /proc/*/maps
/proc/2084/maps:7ff4a4ad3000-7ff4a4ed3000 rw-s 00000000 00:05 491522 /SYSV00000000 (삭제됨)
/proc/2816/maps:7f2763ba1000-7f2763fa1000 rw-s 00000000 00:05 491522 /SYSV00000000 (삭제됨)
[mkamleithner@fedora ~]$ sudo grep 393217 /proc/*/maps
/proc/2084/maps:7ff4b1a60000-7ff4b1a61000 rw-s 00000000 00:05 393217 /SYSV00000000 (삭제됨)
/proc/2631/maps:7fb89be79000-7fb89be7a000 rw-s 00000000 00:05 393217 /SYSV00000000 (삭제됨)
[mkamleithner@fedora ~]$ sudo grep 294912 /proc/*/maps
/proc/2084/maps:7ff4a5510000-7ff4a5590000 rw-s 00000000 00:05 294912 /SYSV00000000 (삭제됨)
/proc/2582/maps:7f7902dd3000-7f7902e53000 rw-s 00000000 00:05 294912 /SYSV00000000 (삭제됨)

프로세스 이름을 얻으십시오:

[mkamleithner@fedora ~]$ ps aux |쿼리 2084
mkamlei+ 2084 5.1 2.0 8149580 159272 tty2 Sl+ 20:29 1:10 /usr/libexec/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -nolisten tcp -Background none -noreset -keeptty - verbose 3
mkamlei+ 5261 0.0 0.0 118476 2208 포인트/0 S+ 20:52 0:00 grep --color=auto 2084
[mkamleithner@fedora ~]$ ps aux grep 3984 |
mkamlei+ 3984 11.4 3.6 1355100 293240 tty2 Sl+ 20:38 1:38 /usr/lib64/firefox/firefox
mkamlei+ 5297 0.0 0.0 118472 2232 포인트/0 S+ 20:52 0:00 grep --color=auto 3984

결과를 게시해야 하는 다른 shmid가 있습니까? 출력을 해석하는 방법을 잘 모르겠습니다.

이 문제를 어떻게 해결할 수 있나요?

편집: "파일을 생성해 주세요" 게임을 시작하면 항상 잠시 후 이 문제가 발생하는 것 같습니다. 하지만 게임이 시작되지 않았을 때 이런 일이 가끔 발생합니다.

Edit2: X 문제인 것 같습니다. Wayland에서는 이런 일이 발생하지 않습니다. 아마도 xorg.conf의 사용자 정의 설정 때문일 것입니다.

최종 편집: 같은 문제가 발생하는 사람을 위해: 저는 DRI 2를 사용하고 있습니다. DRI 3으로 전환하면 문제가 해결될 수도 있습니다. 내 xorg.conf의 관련 부분은 다음과 같습니다.

'장치' 섹션
    식별자 "인텔 그래픽"
    드라이버 "인텔"
    옵션 "AccelMethod" "sna"#
    옵션 "백라이트" "intel_backlight"
    버스 ID "PCI:0:2:0"
    옵션 "DRI" "3" #여기
    옵션 "TearFree" "true"
끝 부분

내 시스템의 관련 파일은 /usr/share/X11/xorg.conf.d/에 있습니다.

답변1

tmpfs에서 사용하는 공유 메모리(주로)(/proc/meminfo의 Shmem, 커널 2.6.32에서 사용 가능, 사용 가능하지 않은 경우 0) >

따라서 맨페이지 정의는 Shared예상만큼 도움이 되지 않습니다. :(. tmpfs가 실제로 사용하는 경우아니요Shared에 대한 높은 값을 반영하려면 해당 값은 MAP_SHARED|MAP_ANONYMOUS(또는 System V 공유 메모리)로 mmap()한 프로세스를 나타내야 합니다.

8G 시스템의 6G 공유 메모리는 여전히많은. 진지하게, 적어도 데스크탑에서는 원하지 않습니다.

이상하게도 "버프/캐시"에도 도움이 되는 것 같습니다. 하지만 저는 Python으로 간단한 테스트를 해보았는데 이것이 작동하는 방식입니다.

공유 메모리가 가장 많은 프로세스를 표시하려면 를 사용하십시오 top -o SHR -n 1.

시스템 V 공유 메모리

마지막으로 System V 공유 메모리 세그먼트를 사용하는 끔찍한 레거시 소프트웨어가 있을 수 있습니다. 만약 그들이 얻는다면방법을 제공, 그들은 나타나지 않습니다 top:(.

를 사용하여 나열할 수 있습니다 ipcs -m -t. 가장 최근에 생성된 것이 여전히 사용되고 있기를 바랍니다. 예를 들어 shmid 번호를 가져옵니다.

$ ipcs -m -t

------ Shared Memory Attach/Detach/Change Times --------
shmid      owner      attached             detached             changed             
3538944    alan       Apr 30 20:35:15      Apr 30 20:35:15      Apr 30 16:07:41     
3145729    alan       Apr 30 20:35:15      Apr 30 20:35:15      Apr 30 15:04:09     
4587522    alan       Apr 30 20:37:38      Not set              Apr 30 20:37:38     

# sudo grep 4587522 /proc/*/maps

-> 그러면 /proc 경로에 표시되는 숫자는 SHM을 사용하는 프로세스의 pid입니다. (따라서 ps의 출력을 grep하여 pid 번호를 찾을 수 있습니다.)

명백한 모순

  1. Xorg에는 8G 매핑이 있습니다. 전용 그래픽 카드 RAM이 없더라도 마찬가지입니다. 주민 수는 1억 5천만명에 불과합니다. 스왑 공간이 부족해서 나머지를 교체하는 것과는 다릅니다.

  2. 표시된 SHM 세그먼트는 ipcs모두 두 프로세스에 모두 연결되어 있습니다. 따라서 그 중 어느 것도 유출되지 않았으며 모두 SHR 열 top(짝수)에 표시되어야 합니다. 사용된 페이지 수가 메모리 세그먼트의 크기보다 작더라도 상관없습니다. 이는 단지 사용되지 않는 페이지가 있다는 의미일 뿐입니다. 하지만 free우리가 점유해야 하는 6GB의 할당된 공유 메모리가 있지만 찾을 수 없다고 가정해 보겠습니다.

답변2

sharedtmpfs에서 사용하는 메모리(주로)(/proc/meminfo의 Shmem, 커널 2.6.32에서 사용 가능, 사용 가능하지 않은 경우 0)

tmpfs는 교체 가능합니다. tmpfs 파일 시스템이 안전 한도를 초과하여 채워졌습니다. 비교를 위해 제가 이 글을 쓰고 있는 시스템에는 200M의 공유 공간이 있습니다. 6G는 데스크톱을 실행하고 Dropbox 및 Steam과 같은 것도 실행할 수 있는 8G 시스템에 비해 너무 많습니다.

일반 도구를 사용하여 문제를 일으키는 파일을 찾을 수 있습니다. 이론적으로는 X 세션이 종료되면 이러한 파일이 사라질 수 있습니다.

$ df -h -t tmpfs
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.9G  1.7M  1.9G   1% /dev/shm
tmpfs           1.9G  1.6M  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs           1.9G   80K  1.9G   1% /tmp
tmpfs           376M   20K  376M   1% /run/user/42
tmpfs           376M   20K  376M   1% /run/user/1000

문제를 해결하고 분석할 기회를 얻고 문제를 채우는 소프트웨어에서 유용한 오류 메시지를 트리거할 수도 있도록 tmpfs 마운트를 제한하십시오.

기본적으로 각 tmpfs는 사용 가능한 RAM의 1/2로 제한됩니다.

따라서 기본 제한 미만으로 여러 tmpfs 마운트를 추가하지 않는 것이 가장 좋습니다. 위에서 볼 수 있듯이 배포판은 내 4GB 시스템과 관련하여 그다지 좋지 않습니다.

확실히제한은 런타임 시 변경될 수 있습니다 mount -oremount,size=10% /tmp.

예를 들어 시작 시 실행되는 위치에 다시 설치 명령을 넣을 수 있습니다 /etc/rc.local(필요할 수 있음 systemctl enable rc-local). /run/user/*이는 스크립트가 실행된 후에 설치될 수 있습니다. 적절한 제한이 있기를 바랍니다 .

기본 tmpfs 설치는 /etc/fstab. systemd에서는 다음을 사용하여 /tmp마운트를 수정할 수 있습니다 . systemctl edit tmp.mount그렇지 않으면 시스템 스크립트를 grep하여 /tmp가 마운트된 위치를 찾을 수 있으며 편집할 수 있는 구성 파일을 사용할 수도 있습니다. 또 다른 유효한 옵션 /tmp은 tmpfs 마운트를 완전히 비활성화하고( systemctl disable tmp.mount) 프로그램이 루트 파일 시스템에만 쓸 수 있도록 하는 것입니다.

관련 정보