歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> Linux 內存洩漏的堆積處理方法

Linux 內存洩漏的堆積處理方法

日期:2017/3/2 16:33:43   编辑:Linux服務器

Linux系統下真正有危害的是內存洩漏的堆積,這會最終消耗盡系統任何的內存。下面是排查和解決方案與大家一起分享。

1、Linux 內存監控內存洩漏的定義:

一般我們常說的內存洩漏是指堆內存的洩漏。堆內存是指程式從堆中分配的,大小任意的(內存塊的大小能夠在程式運行期決定),使用完後必須顯示釋放的內存。應用程式一般使用malloc,realloc,new等函數從堆中分配到一塊內存,使用完後,程式必須負責相應的調用free或delete釋放該內存塊,否則,這塊內存就不能被再次使用,我們就說這塊內存洩漏了。

2、Linux 內存監控內存洩露的危害

從用戶使用程式的角度來看,內存洩漏本身不會產生什麼危害,作為一般的用戶,根本感覺不到內存洩漏的存在。真正有危害的是內存洩漏的堆積,這會最終消耗盡系統任何的內存。從這個角度來說,一次性內存洩漏並沒有什麼危害,因為他不會堆積,而隱式內存洩漏危害性則很大,因為較之於常發性和偶發性內存洩漏他更難被檢測到。存在內存洩漏問題的程式除了會占用更多的內存外,還會使程式的性能急劇下降。對於服務器而言,假如出現這種情況,即使系統不崩潰,也會嚴重影響使用。

3、Linux 內存監控內存洩露的檢測和回收

對於內存溢出之類的麻煩可能大家在編寫指針比較多的復雜的程式的時候就會碰到。在 Linux 或 unix 下,C、C++語言是最使用工具。但是我們的 C++ 程式缺乏相應的手段來檢測內存信息,而只能使用 top 指令觀察進程的動態內存總額。而且程式退出時,我們無法獲知任何內存洩漏信息。

使用kill命令

使用Linux命令回收內存,我們能夠使用Ps、Kill兩個命令檢測內存使用情況和進行回收。在使用終極用戶權限時使用命令“Ps”,他會列出任何正在運行的程式名稱,和對應的進程號(PID)。Kill命令的工作原理是:向Linux操作系統的內核送出一個系統操作信號和程式的進程號(PID)。

應用例子:

為了高效率回收內存能夠使用命令ps 參數v:

[root@www ~]# ps v

PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND

2542 tty1Ss+ 0:00 08 1627 428 0.1 /sbin/mingetty tty1

2543 tty2Ss+ 0:00 08 1631 428 0.1 /sbin/mingetty tty2

2547 tty3Ss+ 0:00 08 1631 432 0.1 /sbin/mingetty tty3

2548 tty4Ss+ 0:00 08 1627 428 0.1 /sbin/mingetty tty4

2574 tty5Ss+ 0:00 08 1631 432 0.1 /sbin/mingetty tty5

2587 tty6Ss+ 0:00 08 1627 424 0.1 /sbin/mingetty tty6

2657 tty7Ss+ 1:1812 1710 29981 7040 3.0 /usr/bin/Xorg :0 -br -a

2670 pts/2 Ss0:01 2 682 6213 1496 0.6 -bash

3008 pts/4 Ss0:00 2 682 6221 1472 0.6 /bin/bash

3029 pts/4 S+0:00 2 32 1783 548 0.2 ping 192.168.1.12

3030 pts/2 R+0:00 2 73 5134 768 0.3 ps v

然後假如想回收Ping命令的內存的話,使用命令:

# Kill -9 3029

Copyright © Linux教程網 All Rights Reserved