Debian

找不到使用四分之一記憶體的程序

  • August 7, 2017

我正在執行一個帶有 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 圖表。這將允許您查看Servicesnetdata 中的部分。根據 debian 版本,可能需要重新啟動才能為它們啟用記憶體報告(您可能需要添加核心啟動參數 - 檢查 wiki)。

引用自:https://serverfault.com/questions/867013