linux伺服器記憶體佔用過大解決辦法

來源:互聯網
上載者:User

今天有一朋友問我為什麼linux伺服器記憶體佔用過高呢,有沒有辦法解決這個問題,下面我來給各位同學介紹linux伺服器記憶體佔用過大解決方案,希望此方法對各位同學有協助。

今天到公司按照慣例檢查了下所有伺服器的狀態,發現有台伺服器的記憶體佔用比平常大很多,如

馬上qq上問了下程式開發是否最近這1-2天改了什麼東西,在得知沒有改什麼的情況下,馬上重啟了下php-fpm和nginx,重啟之後看了下,記憶體釋放出了1G,但這還不行,因為這台伺服器是8G記憶體,平時最多使用4G多的樣子,想今天使用到了7G多都快把伺服器記憶體佔用完了,很明顯是不正常的,繼續進行檢查.


  在檢查過程中,我使用了top來看到底是哪個進程佔用記憶體最大,看了近1分鐘沒有發現什麼,然後使用命令查看佔用記憶體最大的10個進程:

 代碼如下 複製代碼

ps -aux | sort -k4nr | head -n 10

也只是顯示了nginx和php-fpm佔用記憶體最大,但我重啟了這兩個進程,看來跟他們2個無關,我又開始懷疑是不是伺服器被黑了,馬上查看進程ps aux,這一看就發現了問題,有個指令碼在進程裡有很多個產生,馬上執行下面命令進行kill掉:

 代碼如下 複製代碼
kill -9 $(ps aux | grep 進程名 |grep -v grep| awk '{print $2}')

現在這看記憶體使用量率,記憶體終於正常了,好了,再觀察幾分鐘,沒有問題退出伺服器了,繼續檢查那個指令碼的問題.

ps:這裡要強調的事,不要根據自己的直覺去隨便以為是什麼的問題,最好是調查清楚了再去執行,比如我這裡就是根據自己的直覺以為是nginx和php-fpm的問題,還好是跟老大打了招呼重啟的,不然後果很嚴重.

再給大家一個查看記憶體佔用最大的進程的命令:

 代碼如下 複製代碼
ps aux| grep -v "USER" |sort -n -r -k 4 |awk 'NR==1{ print $0}'

我使用的是php指令碼我們這裡在linux中寫了一個linux負載過高時重啟php指令碼

大家可以根據自己伺服器的情況來決定要負載超過多少就重啟php,我這裡只設定了負載到1就重啟php.


  系統:centos 5.9 64位
指令碼內容:
vi check-php.sh

 代碼如下 複製代碼

#!/bin/sh
TOP_SYS_LOAD_NUM=1
SYS_LOAD_NUM=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`

echo $(date +"%y-%m-%d") `uptime`
if [ `echo "$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM"|bc` -eq 1 ]
then
echo "#0#" $(date +"%y-%m-%d %H:%M:%S") "pkill php-fpm" `ps -ef | grep php-fpm | wc -l`
/etc/init.d/php-fpm stop
sleep 8
pkill php-fpm
sleep 8
for i in 1 2 3
do
if [ `pgrep php-fpm | wc -l` -le 0 ]
then
/etc/init.d/php-fpm start
sleep 30
echo "#1#" $(date +"%y-%m-%d %H:%M:%S") "start php-fpm" `ps -ef | grep php-fpm | wc -l`
fi
done
else
if [ `pgrep php-fpm | wc -l` -le 0 ]
then
/etc/init.d/php-fpm start
sleep 30
echo "#2#" $(date +"%y-%m-%d %H:%M:%S") "start php-fpm" `ps -ef | grep php-fpm | wc -l`
fi
fi

定時執行

 代碼如下 複製代碼
*/3 * * * * /root/shell/check-php.sh >>/var/log/check-php.log

如果你運行指令碼出現:

 代碼如下 複製代碼
: line 6: bc: command not found
: line 6: [: -eq: unary operator expected

表示沒有bc命令,centos可以用 yum -y install bc 安裝.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.