과부하 상태에서 스왑 공간에 도달하면 머신이 정지됨

과부하 상태에서 스왑 공간에 도달하면 머신이 정지됨

내 컴퓨터가 여러 번 충돌했습니다. 또한, 메모리를 모두 채우는 프로그램을 실행해도 재현이 가능합니다. 시스템이 스왑 파일에 쓰기 시작하자마자 시스템이 멈추고 재부팅해야 합니다.

로그에는 충돌이 발생하기 전에 다음과 같은 유용한 로그 정보가 표시되지 않습니다.

Mar 23 19:12:01 classen systemd[1]: Starting Cleanup of Temporary Directories...
Mar 23 19:12:01 classen systemd[1]: Started Cleanup of Temporary Directories.
Mar 23 19:12:08 classen wpa_supplicant[757]: wlp3s0: WPA: Group rekeying completed with ...
-- Reboot --
Mar 23 19:17:03 classen systemd-journald[380]: Runtime journal (/run/log/journal/) is 8.0M, max 796.6M, 788.6M free.

사실 저는 이 문제를 어떻게 해결해야 할지 모르겠습니다. 누군가 비슷한 것을 보았고 올바른 방향으로 나를 가리킬 수 있기를 바랍니다. 이상하게도 한동안 작업한 후 내 시스템은 어느 정도 스왑을 수행할 수 있었습니다(적어도 top스왑 공간의 일부가 사용되었음을 나타냄). 정지는 스왑 파일의 로드가 심한 경우에만 발생합니다.


이것은 내 설정입니다.

$ lsblk

NAME                    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                       8:0    0 238.5G  0 disk  
├─sda1                    8:1    0   512M  0 part  /boot
└─sda2                    8:2    0   238G  0 part  
  └─MyStorage           254:0    0   238G  0 crypt 
    ├─MyStorage-swapvol 254:1    0    16G  0 lvm   [SWAP]
    └─MyStorage-rootvol 254:2    0   222G  0 lvm   /
sdb                       8:16   0 931.5G  0 disk  
└─sdb1                    8:17   0 931.5G  0 part  
sr0                      11:0    1  1024M  0 rom   

관련 부품 /etc/fstab:

/dev/mapper/MyStorage-rootvol   /    btrfs   rw,noatime,ssd,autodefrag,compress=lzo,space_cache      0 0
/dev/mapper/MyStorage-swapvol none   swap    defaults        0 0

UUID=63A7-3F81          /boot        vfat    rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro    0 2

$ swapon --summary

Filename                Type        Size    Used    Priority
/dev/dm-1                               partition   16777212    0   -1

저는 4.4.5 커널로 Arch Linux를 실행하고 있습니다.

$ uname -a
Linux classen 4.4.5-1-ARCH #1 SMP PREEMPT Thu Mar 10 07:38:19 CET 2016 x86_64 GNU/Linux

연결 /etc/mkinitcpio.conf:

HOOKS="base udev autodetect modconf block encrypt lvm2 resume filesystems keyboard fsck"

답변1

몇 가지 실험을 통해 거대한 스왑 파티션(16GB)과 함께 사용할 때 실제로 충돌이 발생한다는 것을 확인할 수 있습니다.

Otheus와 Cas의 의견에 감사드립니다. 직감이 정확했습니다. 나는 그 효과를 과소평가했다. 아마도 이전에 사용하던 컴퓨터의 스왑 공간이 메모리에 비해 작았기 때문에 메모리를 많이 차지하는 프로세스가 결국 종료되었을 수도 있습니다.

일부 안전 조치로 시스템의 최대 스왑 공간을 줄입니다. 또한 단일 프로세스의 메모리 부족을 방지하기 위해 프로세스별 제한을 정의했습니다.

# limit memory usage to 10G per process
ulimit -Sv 10000000

이와 같은 도구는 vmstat 1문제를 분석하는 데 도움이 될 수 있습니다.

관련 정보