Debian

記憶體被未知程序掛起

  • February 14, 2013

top我的網路伺服器上的命令有一些奇怪的輸出。輸出按 %MEM 排序:

top - 13:57:43 up 13 days, 21:58,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 118 total,   1 running, 117 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2854520k total,  *2767576k used*,    *86944k free*,   328060k buffers
Swap:  5574648k total,        0k used,  5574648k free,  2194252k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
2528 mysql     20   0  136m  26m 6260 S    0  0.9   0:01.74 mysqld             
2804 www       20   0 40732  15m 4412 S    0  0.6   0:00.72 apache2            
2708 www       20   0 40724  14m 4060 S    0  0.5   0:00.13 apache2            
2844 www       20   0 40696  14m 3984 S    0  0.5   0:00.26 apache2            
2847 www       20   0 40696  14m 3960 S    0  0.5   0:00.12 apache2            
2815 www       20   0 39816  14m 4240 S    0  0.5   0:00.58 apache2            
7516 root      20   0 35264  14m 7776 S    0  0.5   0:11.79 apache2            
1096 bind      20   0 51192 9504 2328 S    0  0.3   0:00.09 named              
2838 www       20   0 35800 8852 1716 S    0  0.3   0:00.00 apache2            
2846 www       20   0 35336 8440 1528 S    0  0.3   0:00.00 apache2            
2850 www       20   0 35336 8440 1528 S    0  0.3   0:00.00 apache2            
2849 www       20   0 35312 7960 1072 S    0  0.3   0:00.00 apache2            
2891 www       20   0 35296 7772  892 S    0  0.3   0:00.00 apache2            
1147 root      20   0 48532 6948 2300 S    0  0.2   0:00.09 lwresd                            
1414 postgres  20   0 46444 5456 4640 S    0  0.2   0:08.90 postgres           
1564 root      20   0 18512 5096 4280 S    0  0.2   0:02.96 smbd              

請注意輸出標題中的已可用總數。

基本上我所有的記憶都在咀嚼,但這個輸出似乎並不能幫助我診斷問題。

什麼可能會消耗所有記憶體?

伺服器是 Debian 5,安裝了標準 LAMP 堆棧和 samba。

作業系統有大量的備用記憶體,所以沒有必要釋放任何記憶體。假設作業系統釋放了一些記憶體,會發生以下兩種情況之一:

  1. 沒有什麼會很快使用那段記憶。在這種情況下,釋放記憶體是浪費時間,因為它沒有被使用。
  2. 很快就會有東西使用那段記憶。在這種情況下,釋放記憶體是浪費時間,因為系統只需要再次使用它。

無論哪種情況,努力都是白費。這就是為什麼現代作業系統只有在絕對別無選擇時才會釋放記憶體。在這種情況下,作業系統有另一種選擇——它可以使用記憶體來保存最近從磁碟讀取或寫入磁碟的數據,以希望某些東西需要再次訪問該數據並且可以保存磁碟訪問。

如果你在想“我現在想要釋放記憶體,以便以後可以使用它”,那就別想了。您現在可以使用它,以後使用它。沒有必要進行痛苦的權衡。

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