스왑 사용량이 너무 높습니까?

약 한 달 전에 새로 설치 한 데비안 시드 상자가 있는데 현재 데스크탑 앱이 실행되고 있지 않습니다.

ssh를 통해 실행하려고하면 명령이 하드 디스크 작동을 매우 어렵게 만듭니다. Ubuntu 8.04를 실행하는 동안 몇 주 전에 시스템이 완벽하게 작동했습니다. 하드웨어에 문제가없고, 스마트 도구가 문제를보고하지 않으며, 메모리 검사 등이 없어야합니다.

문제가 스와핑과 관련이 있다고 생각합니다.

$ free -h
             total       used       free     shared    buffers     cached
Mem:          998M       986M        12M         0B       464K       904M
-/+ buffers/cache:        81M       917M
Swap:         511M       511M         0B

테스트 결과, 대부분의 물리적 램이 캐시에 사용되지만 재부팅하지 않고 스왑을 비활성화 할 수 없음을 알았습니다.

# swapoff  -a
swapoff: /swapfile: swapoff failed: Cannot allocate memory

stackoverflow answer에 언급 된 스크립트를 실행할 때 가장 높은 스왑 사용 프로세스는 거의 1.5megs를 사용하지 않았으며 총 수는 다음과 같습니다.

"Overall swap used: 18376 kB"

… 그것이 멈추거나 무료로보고있는 반 공연과는 거리가 멀다.

나는 변화 시도 swappiness1반 한 달 전에,하지만 차이 (동일한 메모리 사용 패턴)이 없습니다.

범인이 될 수있는 아이디어가 있습니까?

편집 : 여기 /proc/meminfo내용이 있습니다 (유사한 상황이지만 904 대신 702megs의 캐시가 있으며 크롬은 여전히 ​​열려 있습니다).

MemTotal:        1022464 kB
MemFree:           14344 kB
Buffers:             192 kB
Cached:           719816 kB
SwapCached:         2212 kB
Active:           304304 kB
Inactive:         657344 kB
Active(anon):     294128 kB
Inactive(anon):   651264 kB
Active(file):      10176 kB
Inactive(file):     6080 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:        127336 kB
HighFree:            316 kB
LowTotal:         895128 kB
LowFree:           14028 kB
SwapTotal:        524284 kB
SwapFree:              0 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:        239528 kB
Mapped:            11968 kB
Shmem:            703760 kB
Slab:              28924 kB
SReclaimable:      12116 kB
SUnreclaim:        16808 kB
KernelStack:        2200 kB
PageTables:         5812 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1035516 kB
Committed_AS:    2193368 kB
VmallocTotal:     122880 kB
VmallocUsed:       14092 kB
VmallocChunk:     105548 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      911352 kB
DirectMap2M:           0 kB

그리고 여기의 top -b -n 1출력은 :

top - 22:00:18 up 1 day,  2:34,  4 users,  load average: 1,97, 1,25, 0,88
Tasks: 137 total,   3 running, 134 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4,9 us,  3,0 sy,  2,7 ni, 83,2 id,  6,1 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem:   1022464 total,  1008788 used,    13676 free,      188 buffers
KiB Swap:   524284 total,   524284 used,        0 free,   719792 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM     TIME+ COMMAND
 7861 stenyak   20   0  6336 1252  976 R  18,0  0,1   0:00.03 top
 5194 isabel    30  10 44372 5344 1404 R  12,0  0,5   0:36.11 glmatrix
17940 root      20   0  103m 6844 2828 S   6,0  0,7  11:02.21 Xorg
    1 root      20   0  2280   28    0 S   0,0  0,0   0:02.49 init
    2 root      20   0     0    0    0 S   0,0  0,0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S   0,0  0,0   0:15.25 ksoftirqd/0
    5 root      20   0     0    0    0 S   0,0  0,0   0:00.00 kworker/u:0
    6 root      rt   0     0    0    0 S   0,0  0,0   0:00.93 migration/0
    7 root      rt   0     0    0    0 S   0,0  0,0   0:00.46 watchdog/0
    8 root      rt   0     0    0    0 S   0,0  0,0   0:00.73 migration/1
   10 root      20   0     0    0    0 S   0,0  0,0   0:17.30 ksoftirqd/1
   12 root      rt   0     0    0    0 S   0,0  0,0   0:00.43 watchdog/1
   13 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 cpuset
   14 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 khelper
   15 root      20   0     0    0    0 S   0,0  0,0   0:00.00 kdevtmpfs
   16 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 netns
   17 root      20   0     0    0    0 S   0,0  0,0   0:00.44 sync_supers
   18 root      20   0     0    0    0 S   0,0  0,0   0:00.00 bdi-default
   19 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 kintegrityd
   20 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 kblockd
   22 root      20   0     0    0    0 S   0,0  0,0   0:00.07 khungtaskd
   23 root      20   0     0    0    0 D   0,0  0,0   2:50.47 kswapd0
   24 root      25   5     0    0    0 S   0,0  0,0   0:00.00 ksmd
   25 root      20   0     0    0    0 S   0,0  0,0   0:00.00 fsnotify_mark
   26 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 crypto
   99 root      20   0     0    0    0 S   0,0  0,0   0:00.00 khubd
  115 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 ata_sff
  116 root      20   0     0    0    0 S   0,0  0,0   0:00.00 scsi_eh_0
  117 root      20   0     0    0    0 S   0,0  0,0   0:00.00 scsi_eh_1
  118 root      20   0     0    0    0 S   0,0  0,0   0:01.66 kworker/u:1
  152 root      20   0     0    0    0 S   0,0  0,0   0:02.12 jbd2/sda1-8
  153 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 ext4-dio-unwrit
  280 root      20   0  2944  352  128 S   0,0  0,0   0:00.30 udevd
  423 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 hd-audio0
 1286 root      20   0     0    0    0 S   0,0  0,0   0:07.06 jbd2/sda2-8
 1287 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 ext4-dio-unwrit
 1561 root      20   0     0    0    0 S   0,0  0,0   0:03.09 flush-8:0
 1603 root      20   0  2376   48    0 S   0,0  0,0   0:00.33 rpcbind
 1634 statd     20   0  2648   68   64 S   0,0  0,0   0:00.00 rpc.statd
 1639 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 rpciod
 1641 root       0 -20     0    0    0 S   0,0  0,0   0:00.00 nfsiod
 1648 root      20   0  2576    0    0 S   0,0  0,0   0:00.00 rpc.idmapd
 2019 root      20   0 29088  976    0 S   0,0  0,1   0:22.26 rsyslogd
 2123 root      20   0  1876   84   24 S   0,0  0,0   0:00.23 acpid
 2161 message+  20   0  3756  728    0 S   0,0  0,1   0:02.06 dbus-daemon
 2213 daemon    20   0  2152   20    0 S   0,0  0,0   0:00.00 atd
 2231 root      20   0  4488  220  128 S   0,0  0,0   0:00.00 bluetoothd
 2242 root      10 -10     0    0    0 S   0,0  0,0   0:00.00 krfcommd
 2259 avahi     20   0  3272  292  168 S   0,0  0,0   0:00.66 avahi-daemon
 2262 avahi     20   0  3156   24    0 S   0,0  0,0   0:00.00 avahi-daemon
 2265 root      20   0  5968  180  152 S   0,0  0,0   0:00.00 bitlbee
 2271 root      20   0     0    0    0 S   0,0  0,0   0:11.69 kworker/0:2
 2304 root      20   0 19056  700  220 S   0,0  0,1   0:00.75 NetworkManager
 2334 root      20   0  5536  176  108 S   0,0  0,0   0:02.86 cron
 2350 root      20   0  6700  492  152 S   0,0  0,0   0:00.01 sudo
 2351 root      20   0 15304 5880 1428 R   0,0  0,6  61:42.79 iotop
 2359 root      20   0 24256  600   56 S   0,0  0,1   0:01.12 polkitd
 2390 root      20   0  6892  368  180 S   0,0  0,0   0:00.15 modem-manager
 2392 root      20   0  7536   80    0 S   0,0  0,0   0:00.13 cupsd
 2396 root      20   0 20964  516  296 S   0,0  0,1   0:00.15 gdm3
 2712 root      20   0 10068  196   84 S   0,0  0,0   0:11.72 kerneloops
 2714 root      20   0  6896 2108  372 S   0,0  0,2   0:05.69 ddclient - slee
 2802 Debian-+  20   0  7424  100   40 S   0,0  0,0   0:00.05 exim4
 2877 daemon    20   0  1868  236  172 S   0,0  0,0   0:01.22 uptimed
 2881 root      20   0  6464  208  104 S   0,0  0,0   0:00.27 sshd
 2913 root      20   0  1848   72    8 S   0,0  0,0   0:00.00 minissdpd
 2936 root      20   0  4328   40   36 S   0,0  0,0   0:00.00 getty
 2937 root      20   0  4328   40   36 S   0,0  0,0   0:00.00 getty
 2938 root      20   0  4328   40   36 S   0,0  0,0   0:00.00 getty
 2939 root      20   0  4328   40   36 S   0,0  0,0   0:00.00 getty
 2940 root      20   0  4328   40   36 S   0,0  0,0   0:00.00 getty
 2941 root      20   0  4328   40   36 S   0,0  0,0   0:00.00 getty
 2961 root      20   0 23384  540  156 S   0,0  0,1   0:00.88 accounts-daemon
 2965 root      20   0 29216  292   64 S   0,0  0,0   0:01.35 console-kit-dae
 3050 root      20   0 27408  320    0 S   0,0  0,0   0:00.48 upowerd
 3115 stenyak   20   0  6260  320   84 S   0,0  0,0   0:00.51 screen
 3119 stenyak   20   0  6260  248   40 S   0,0  0,0   0:00.61 screen
 3121 stenyak   20   0  6260  132   16 S   0,0  0,0   0:00.48 screen
 3124 stenyak   20   0  6388 1004  572 S   0,0  0,1   1:33.81 p2p.sh
 3125 stenyak   20   0 34176 5604 1764 S   0,0  0,5   1:57.10 quasselcore
 3129 stenyak   20   0 55268 2972  652 S   0,0  0,3   3:00.32 bot.py
 3280 rtkit     21   1 18980  180   64 S   0,0  0,0   0:01.23 rtkit-daemon
 3367 root      20   0     0    0    0 S   0,0  0,0   0:00.00 kauditd
 3684 root      20   0  2940  340  112 S   0,0  0,0   0:00.00 udevd
 3685 root      20   0  2940  208    0 S   0,0  0,0   0:00.00 udevd
 5845 root      20   0  6444  904  592 S   0,0  0,1   0:00.00 cron
 5876 stenyak   20   0  1932  428  368 S   0,0  0,0   0:00.00 sh
 5878 stenyak   20   0  6048 1232 1080 S   0,0  0,1   0:00.00 memmon.sh
 7857 stenyak   20   0  5060  508  448 S   0,0  0,0   0:00.00 sleep
 9071 root      20   0  9816  860  200 S   0,0  0,1   0:00.10 sshd
 9080 stenyak   20   0 10180 1112  136 S   0,0  0,1   0:06.93 sshd
 9081 stenyak   20   0  9280 3232  148 S   0,0  0,3   0:00.62 bash
 9436 root      20   0  7396 1188  684 S   0,0  0,1   0:07.05 bitlbee
10285 root      20   0     0    0    0 S   0,0  0,0   0:00.00 kworker/1:0
12728 stenyak   20   0  7960 2960  648 S   0,0  0,3  23:35.01 htop
12950 root      20   0  9832   80   76 S   0,0  0,0   0:00.08 sshd
12955 stenyak   20   0  9832    0    0 S   0,0  0,0   0:00.04 sshd
12956 stenyak   20   0  9304   36   32 S   0,0  0,0   0:00.64 bash
17939 root      20   0 23284 1080  320 S   0,0  0,1   0:00.11 gdm-simple-slav
18062 root      20   0 29808  964  364 S   0,0  0,1   0:00.38 gdm-session-wor
20066 root      20   0     0    0    0 S   0,0  0,0   0:09.72 kworker/0:0
28369 isabel    20   0  1932  112  108 S   0,0  0,0   0:00.03 sh
28404 isabel    20   0  3868  260   68 S   0,0  0,0   0:00.20 ssh-agent
28407 isabel    20   0  3516    0    0 S   0,0  0,0   0:00.00 dbus-launch
28408 isabel    20   0  3420  304  116 S   0,0  0,0   0:00.24 dbus-daemon
28416 isabel    20   0  6344  744  548 S   0,0  0,1   0:00.29 xfconfd
28422 isabel    20   0  8336  496  248 S   0,0  0,0   0:01.46 xscreensaver
28424 isabel    20   0 21932  580  340 S   0,0  0,1   0:00.17 xfce4-session
28430 isabel    20   0 24392 2032 1160 S   0,0  0,2   0:16.32 xfwm4
28432 isabel    20   0  117m 2072  908 S   0,0  0,2   0:01.26 xfce4-panel
28434 isabel    20   0 22520  256  256 S   0,0  0,0   0:00.06 Thunar
28436 isabel    20   0 21016  688  460 S   0,0  0,1   0:00.06 xfsettingsd
28437 isabel    20   0  119m 3344 1312 S   0,0  0,3   0:03.50 xfdesktop
28441 isabel    20   0 21072  272  268 S   0,0  0,0   0:00.07 kerneloops-appl
28443 isabel    20   0 29816  540  228 S   0,0  0,1   0:00.10 polkit-gnome-au
28450 isabel    20   0  263m  544  276 S   0,0  0,1   0:00.30 xfce4-volumed
28452 isabel    20   0 63936  488    0 S   0,0  0,0   0:00.31 tracker-store
28457 isabel    20   0 23240  768  472 S   0,0  0,1   0:00.18 xfce4-settings-
28460 isabel     9 -11 99532  500  248 S   0,0  0,0   0:00.38 pulseaudio
28470 isabel    20   0 21936  612  312 S   0,0  0,1   0:00.20 panel-6-systray
28472 isabel    20   0  339m 1348  552 S   0,0  0,1   0:00.42 xfce4-mixer-plu
28473 isabel    20   0 22028 2292 1740 S   0,0  0,2   0:59.33 xfce4-oragecloc
28514 isabel    20   0  371m  21m 2428 S   0,0  2,1   3:46.22 chromium
28517 isabel    20   0  111m 3020  288 S   0,0  0,3   0:00.58 chromium
28518 isabel    20   0  1948   64    0 S   0,0  0,0   0:00.00 chromium-sandbo
28519 isabel    20   0  120m 3324  288 S   0,0  0,3   0:00.20 chromium
28522 isabel    20   0  128m 3252  204 S   0,0  0,3   0:00.01 chromium
28558 isabel    20   0  208m  52m  476 S   0,0  5,3   1:25.92 chromium
28573 isabel    20   0  271m 103m 1244 S   0,0 10,3   3:01.64 chromium
28693 isabel    20   0  120m 3836  628 S   0,0  0,4   0:43.86 chromium
28696 isabel    20   0 83088 6412  108 S   0,0  0,6   0:16.55 GoogleTalkPlugi
28706 isabel    20   0  159m 6896  972 S   0,0  0,7   9:00.72 chromium
32332 root      20   0     0    0    0 S   0,0  0,0   0:06.24 kworker/1:2
32351 stenyak    9 -11 99108 1032  192 S   0,0  0,1   0:00.51 pulseaudio
32455 root      20   0  9816  108   76 S   0,0  0,0   0:00.11 sshd
32460 stenyak   20   0  9992  264  144 S   0,0  0,0   0:07.43 sshd
32462 stenyak   20   0  9300 1976  108 S   0,0  0,2   0:01.31 bash


답변

RAM이 스왑 된 메모리 양을 초과 할 수 없기 때문에 스왑 오프 할 수 없습니다. 합법적 인 오류 메시지가 나타납니다.

작은 스 니펫.

if (!quiet || errno == ENOMEM)
    warn(_("%s: swapoff failed"), orig_special);

return -1;

내 의견으로는, 워크로드는 RAM 수요를 증가시킵니다. 더 많은 메모리가 필요한 워크로드를 실행 중입니다. 전체 스왑의 사용은이를 나타냅니다. 또한 swappiness를 1로 변경하는 것은 현명한 결정이 아닐 수 있습니다. swappiness를 1로 설정한다고해서 교체가 수행되지는 않습니다. 스와핑과 관련하여 커널이 얼마나 적극적인지를 나타내며 스와핑을 제거하지는 않습니다. 교체가 필요한 경우 스와핑이 발생합니다.

또한, 왜 당신이 스왑을 비활성화하려고하는지 모르겠습니다. 많은 양의 RAM이 없으면 스왑을 비활성화하지 않아야합니다.

물론 재부팅 할 수 있으며 스왑 사용량은 0이됩니다. 그리고 안전하게 교환 할 수 있습니다. 그러나 이것이 장기적으로 문제를 해결하지는 못합니다.

/proc/meminfo출력을 게시 하시겠습니까?


답변

가능한 이유 중 하나는 예를 들어 메모리로 백업 된 파일 시스템에 /tmp마운트 되기 때문입니다 tmpfs.

이 경우 ( df -hT /tmp), 거기에 남아있는 파일을 제거 / 이동하면 응용 프로그램이 / tmp (또는 tmpfs:에 마운트 된 파일 시스템)를 다시 채우지 않아야합니다 df -ht tmpfs.이 문제가 해결됩니다.


답변

시스템이 스왑으로 메모리를 스왑 아웃하고 대신 버퍼에 메모리를 사용하는 경우 실제로 나쁘지는 않습니다. 이것은 아마도 두 가지를 나타냅니다.

  • 많이 사용되지 않는 많은 응용 프로그램이 실행되고 있습니다 (~ 500MB)
  • 보유한 1GB의 RAM보다 많은 데이터를 읽고 쓰는 다른 응용 프로그램을 사용합니다. 시스템은 빠른 액세스를 위해 메모리에 하드 디스크 데이터를 버퍼링하여 이러한 응용 프로그램의 성능을 향상 시키려고합니다.

예, ~ 600MB의 메모리 만 사용중인 것 같습니다. 시스템 스왑의 원인은 메모리를 과도하게 사용하는 응용 프로그램이 아니라 버퍼에 부딪히는 매우 많은 I / O 워크로드입니다. 모든 I / O를 수행하는 프로세스를 식별 할 수 있습니까? 서버를 무엇을 사용하고 있습니까?


답변

프로세스 단위로 스왑 크기를 제공하는 도구는 알지 못하지만 쉽게 쓸 수 있습니다 … (쉘 스크립트 예제는 아래를 참조하십시오)

Linux에는라는 도구가 제공됩니다 smem. 데비안 / 우분투에서 설치하려면 사용할 수 있어야합니다 (프로세스에 많은 파이썬 패키지를 설치합니다).

apt-get install smem

그런 다음 사용하려면 smem명령 줄에 입력 하십시오.


프로세스 스왑 사용량이 얼마인지 확인하는 다른 솔루션 은 프로세스 파일 에서 VmSwap 매개 변수 를 확인하는 것 status입니다.

사용 top또는 htop또는 ps또는 pgrep또는 pidof(프로세스 식별자를 결정 … PID) 다음 상태 파일을 보면 :

$ pidof myprocess
123
$ cat /proc/123/status

여기에는 현재 프로세스에서 사용하는 메모리에 대한 정보가 포함됩니다. 예가 있습니다 :

Name:   snapinit
State:  S (sleeping)
Tgid:   2769
Ngid:   0
Pid:    2769
PPid:   1
TracerPid:  0
Uid:    0   0   0   0
Gid:    0   0   0   0
FDSize: 64
Groups:
NStgid: 2769
NSpid:  2769
NSpgid: 2765
NSsid:  2765
VmPeak:   141952 kB
VmSize:   141952 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:     11552 kB
VmRSS:      3444 kB
VmData:      772 kB
VmStk:       136 kB
VmExe:       244 kB
VmLib:     62356 kB
VmPTE:       208 kB
VmPMD:        12 kB
VmSwap:     1968 kB
HugetlbPages:          0 kB
Threads:    1
SigQ:   0/3912
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000014006
SigIgn: 0000000000001000
SigCgt: 00000001800004c8
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
Seccomp:    0
Cpus_allowed:   1
Cpus_allowed_list:  0
Mems_allowed:   00000000,00000001
Mems_allowed_list:  0
voluntary_ctxt_switches:    36
nonvoluntary_ctxt_switches: 23

관심있는 섹션은 Vm<name>매개 변수 (즉, 프로세스에 사용 가능한 유일한 종류의 메모리 인 가상 메모리, 커널 만이 실제 실제 메모리를 처리하고 VM은 MMU에 의해 생성됨)를 표시하는 섹션입니다 .

VmPeak:   141952 kB
VmSize:   141952 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:     11552 kB
VmRSS:      3444 kB
VmData:      772 kB
VmStk:       136 kB
VmExe:       244 kB
VmLib:     62356 kB
VmPTE:       208 kB
VmPMD:        12 kB
VmSwap:     1968 kB

필자의 경우이 프로세스에서만 사용되는 스왑 메모리 (VmSwap)는 1968Kb, 거의 2Mb입니다.

VmLib 매개 변수는 공유 라이브러리 (.so 파일)에 사용되는 메모리 양을 보여줍니다. 비록 이것이 큰 것처럼 보이지만 공유 라이브러리가 사용하는 메모리는 모든 프로세스에서 공유됩니다.

쉘에서 다음과 같은 명령 행으로 매개 변수를 검색 할 수 있습니다.

#!/bin/sh
echo "  NAME                        PID        SWAP"
for PID in /proc/[0-9]*
do
  if stat $PID/status >/dev/null
  then
    # get name of process
    procname=`grep 'Name:' $PID/status | awk -e '{ print $2 };'`
    # get amount of swap in use by that process
    procswap=`grep 'VmSwap:' $PID/status | awk -e '{ print $2 };'`

    printf "%-21s %11d %11d\n" $procname `basename $PID` $procswap
  fi
done

프로세스가 종료되면 $ PID / status 파일이 사라지고이 for 루프는이를 제대로 확인하지 않습니다. 또한 일부 파일은 일반 사용자가 읽을 수 없습니다 (즉, 루트 인 경우 각 프로세스에 대한 결과가 표시되고, 그렇지 않으면 일부 프로세스가 오류 또는 0Kb를 반환 함)

샘플 출력이 있습니다. SWAP 데이터는 킬로 바이트 입니다.

  NAME                        PID        SWAP
systemd                         1         348
watchdog/0                     10           0
ipv6_addrconf                 106           0
ureadahead                  13234          28
gnome-calculato             13997           0
apache2                     14175        7240
freshclam                    1447        3072
systemd-logind               1449         244

답변

당신이 그 이유의가, 어떤 프로세스를 중지 할 수 있도록 스왑 가득 죽이는 프로세스 사용을 kill -9 PID
사용 후, 그리고
sudo swapoff -a

내 조건에서 나는 sidekiq worker를 멈추고 스왑 메모리를 재 할당했다.

digitalocean 서버 스왑 메모리