1. 程式人生 > >linux跟目錄記憶體爆滿,導致伺服器上專案經常卡停

linux跟目錄記憶體爆滿,導致伺服器上專案經常卡停

廢話不多說,直接進入正題

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

專案在伺服器上部署的記憶體空間只有50G

首先,開啟終端輸入df -h可以查詢到如上圖所示的資訊,從中可以看出跟目錄只有50G,而且現在已經使用了47G,還用3.3G可以使用,使用率達到了94%。

這個是導致伺服器經常掛掉的原因,現在要做的是釋放記憶體。

首先,我只是去釋放了部署專案的tomcat下的記憶體,服務是可以啟動了,但是根本的原因並沒有解決,記憶體使用率還是在不停的上升,一直手動監控,從94%上升到了97%。甲方爸爸說,你就這樣看著,隨時清理,伺服器要是再掛就是你的問題。

解決問題:

cd / 首先切換到跟目錄下,進行操作

1、find / -xdev -size +1000M -exec ls -l {} \; 查詢目錄下記憶體超過1000M的檔案;

看出來了,是mysql的日誌檔案佔用了較大的記憶體。其實一開始我使用top命令查看了cpu的使用率,是mysql佔據的最多,甚至超過120,130左右,那時候就懷疑過時,mysql的日誌檔案的問題,但是,因為這個專案是一個經手很多人,甲方又沒人去維護的一個專案,在伺服器中我能看到很多個mysql資料夾,所以具體是哪一個,我不敢隨便動手刪除檔案。

現在通過命令查到了具體的位置,那麼接下來就是去清除這個檔案,釋放記憶體了。

2、根據上一部查詢出來的內容,切換目錄到相應的位置

cd /var/lib/mysql

然後釋放記憶體

echo "" > mysql.log

釋放之後去使用命令df -h檢視,發現記憶體大量被釋放

 

其實總結起來正確的解決方法很快,可能就幾步。但是這個正確的過程就不太容易了,甲方在後面追,老闆在催,你自己手裡還有自己其它的專案要去做,只有自己能體會啊。

說說我解決問題的過程,其實也有很多東西可學。建議你看下去。

首先,我輸入df -h查看了記憶體狀況

通過這個可以看到各個目錄下面記憶體的使用狀況。然後我輸入了top指令,查看了cpu的使用狀況

我從cpu的使用狀況看到是mysql對cpu的使用率佔據很多,但是在這告訴大家,這個並不能確定一定就是mysql的問題,只是加深我的猜測,因為,這個cpu使用率在我看來和記憶體貌似並麼有多大的聯絡。

然後我在cd / 目錄下面輸入了du -sh * 命令

我在網上查到的關於這個命令的解釋是可以檢視目錄下檔案的大小,下面是我在/目錄下的資訊

當時我看到home佔據402G的時候就是一陣懷疑,我在home下面部署的是一個自動翻譯,佔據的記憶體是很大,但是這個究竟是不是造成伺服器掛掉的原因呢,畢竟通過前面的查詢,根目錄只有50G啊。想想自己的目錄cd /

然後我將目錄切換到了etc目錄下cd /etc 然後運行了du -sh *

確實查詢除了各個檔案的大下,但是是該etc目錄下的檔案的大小,同理,在cd /目錄下,我怕查的是硬碟的大小吧。

時間很急,看著使用率達到97快到98,伺服器馬上要掛了,我能怎麼辦啊。先解燃眉之急吧,先把tomcat下的日誌檔案刪除了,但是這次並沒有多大效果,因為前面已經刪除過一次了。我就想,估計是甲方又在做什麼測試,導致什麼檔案不停上升。想到這,對了,去看看資料庫日誌。cd /var/log

然後輸入du -sh *

 

是不是很驚喜,並沒有很大的檔案存在,那麼這個本應該儲存日誌的地方,儲存的日誌檔案呢?

既然這樣不能解決問題,就只能進入mysql去傷處日誌了。

mysql -u root -p

輸入密碼登入資料庫

use mysql;

show binary logs; 檢視日誌檔案

 

這個是我清理過後的樣子,在沒清理之前是有很多日誌列表的

show master status; 檢視當前正在使用的日誌檔案,該命令會返回一個當前正在使用日誌檔案的檔名。注意當前使用的日誌檔案你是不能刪除的,那麼在刪除日誌檔案的時候你是不能刪除該檔案的。

purge binary logs to ‘mysql_bin.000038’; mysql_bin.000038是當前正在使用的日誌檔名。

完成上面命令我再去cd /目錄下輸入df -h

發現從98%下降到94%,下降了,但是顯然根本問題並沒有解決。

這時候明確目標,清理無用記憶體,釋放記憶體。而顯然記憶體最對的地方就在日誌這一塊

cd /var

du -sh *

然後我發現在lib檔案居然佔了23G,一個儲存日誌的地方,這裡有23G,進去看看

我進去之後發現資料夾很多,但是我發現了兩個資料夾,一個是tomcat,一個是mysql,我想先拿mysql下手,因為剛才的清理mysql起效最多。進去之後發現好多.log檔案,然後我突然想到一個命令

find / -xdev -size +1000M -exec ls -l {} \;

通過它,我鎖定了真正這個佔據記憶體最多的日誌檔案mysql.log

這時候,清理釋放

echo "" > mysql.log

然後切換目錄 cd /

然後輸入df -h

發現根目錄的使用率一下下降到了38%。問題就這樣解決

最後然後輸入

du -h -x --max-depth=1檢視記憶體使用狀況

 

總結一下:核心是找到需要清理的檔案,清理檔案,釋放記憶體。關鍵是找到對的檔案,一步步慢慢找,總能找到,多執行幾個命令,多分析一下,總會找對的。