Debian
記憶體被未知程序掛起
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。
作業系統有大量的備用記憶體,所以沒有必要釋放任何記憶體。假設作業系統釋放了一些記憶體,會發生以下兩種情況之一:
- 沒有什麼會很快使用那段記憶。在這種情況下,釋放記憶體是浪費時間,因為它沒有被使用。
- 很快就會有東西使用那段記憶。在這種情況下,釋放記憶體是浪費時間,因為系統只需要再次使用它。
無論哪種情況,努力都是白費。這就是為什麼現代作業系統只有在絕對別無選擇時才會釋放記憶體。在這種情況下,作業系統有另一種選擇——它可以使用記憶體來保存最近從磁碟讀取或寫入磁碟的數據,以希望某些東西需要再次訪問該數據並且可以保存磁碟訪問。
如果你在想“我現在想要釋放記憶體,以便以後可以使用它”,那就別想了。您現在可以使用它,以後再使用它。沒有必要進行痛苦的權衡。