找不到使用四分之一記憶體的程序
我正在執行一個帶有 Debian 9 (stretch) 和 2GB RAM 的小型 vServer。
幾個月來,我不知何故缺少了大約 500MB 的 RAM,而且我不知道它們是如何使用的。
當我跑
free -h
total used free shared buff/cache available Mem: 2.0G 1.0G 482M 66M 511M 764M Swap: 1.0G 0B 1.0G
我可以看到使用了一半的記憶體,大約四分之一用於記憶體,如果需要可以釋放,其餘的都是空閒的。
但是當我現在檢查我正在執行的程序時,我只能發現我的程序使用了大約 500MB。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1458 mysql 20 0 927516 359260 0 S 0.0 17.5 108:31.26 mysqld 877 seafile 20 0 258032 94644 4876 S 0.0 4.6 0:22.92 python2.7 460 seafile 20 0 237156 85504 8036 S 0.0 4.2 0:13.14 python2.7 463 seafile 20 0 233096 82236 8956 S 0.0 4.0 0:05.79 python2.7 875 seafile 20 0 244356 81644 5408 S 0.0 4.0 0:19.50 python2.7 461 seafile 20 0 232464 81032 8232 S 0.0 3.9 0:03.58 python2.7 4054 www-data 20 0 374264 54976 45128 S 0.0 2.7 0:07.58 php-fpm7.0 4026 www-data 20 0 372652 54840 44408 S 0.0 2.7 0:10.36 php-fpm7.0 1865 seafile 20 0 1704520 52828 16 S 0.0 2.6 3:45.10 seaf-server 4021 www-data 20 0 370836 48880 40468 S 0.0 2.4 0:10.83 php-fpm7.0 1975 seafile 20 0 129128 47156 1944 S 0.0 2.3 0:02.06 python2.7 21106 netdata 20 0 189412 36600 2660 S 0.3 1.8 16:07.50 netdata 1604 lukas 20 0 107132 34860 2736 S 0.0 1.7 2:07.91 gunicorn
我不知道剩餘的 500MB 記憶體在哪裡。
我懷疑核心,但執行
slabtop
顯示它只使用了大約 80MB。Active / Total Size (% used) : 76599.41K / 79594.40K (96.2%)
我在我的伺服器上執行netdata,它很好地顯示了每個類別的記憶體使用情況,並且確實顯示了我失去的 530MB。我玩弄了分組並創建了一個
testing
使用以下配置呼叫的新組,它包括我失去的記憶體(在/etc/netdata/apps_groups.conf
)testing: systemd*
為什麼 systemd(或 netdata 歸類為 systemd 的東西)使用了我大約四分之一的記憶體?重新啟動後它只使用 50MB,但一段時間後它總是使用大約 500MB。
systemd 是 pid 為 1 的程序。所有其他程序都是 systemd 的子程序。
在 netdata 中,所有與給定組不匹配的程序都分配給 category
other
。由於 netdata 將程序分配給尊重其層次結構的組,因此匹配
systemd*
只是將大多數程序從other
移至testing
. 所以systemd*
不是一個真正有用的匹配。如果我是你,我會嘗試了解伺服器執行哪些應用程序並為這些特定應用程序添加組。
此外,您可以在 netdata 中啟用 systemd 圖表。這將允許您查看
Services
netdata 中的部分。根據 debian 版本,可能需要重新啟動才能為它們啟用記憶體報告(您可能需要添加核心啟動參數 - 檢查 wiki)。