分析阿里雲 ECS 出現內存占用過高原因
簡介: 本文主要通過腳本的方式收集和分析 ECS 占用內容過高的原因
轉https://developer.aliyun.com/article/776475
#!/bin/bash # 分析阿里雲 ECS 出現內存占用過高原因 # author:hanli function freem(){ echo -e "\033[32m---- free 系統內存使用詳情 ----\033[0m" which free && free -m || return 1 } function topfree(){ echo -e "\033[32m---- top 系統內存使用詳情 ----\033[0m" which top && top -d 1 -n 1 -o %MEM | grep PID -A 10 || return 1 TPID=`top -d 1 -n 1 -o %MEM | grep PID -A 10 | awk 'NR==2{print $2}'` } function psfree(){ echo -e "\033[32m---- PS 進程內存使用詳情 ----\033[0m" which ps && ps auxw --sort=-rss | head -n 10 || return 1 PSPID=`ps auxw --sort=-rss | awk 'NR==2{print $2}'` } function Judage(){ if [[ $TPID == $PSPID ]]; then echo -e "\033[32m---- PID $PSPID 占用內容較高----\033[0m" fi } function meminfo(){ echo -e "\033[32m---- 內存分配詳情 ----\033[0m" total=$(grep MemTotal /proc/meminfo|awk '{print $2}') while read line do #echo "1 2 3" | { read a b c;echo $a; } flag=$(echo $line | egrep -vi "mem*|Vmallo*" | awk '$2!=0{print}' | awk '{print $1}') value=$(echo "$line" | egrep -vi "mem*|Vmallo*" |awk '$2!=0{print}' | awk '{print $2}') if [[ "$value" -ne "" ]]; then precent=$(echo "scale=2; $value / $total * 100" | bc) echo -e "$flag \t內存占比 $precent %" fi done < /proc/meminfo } if freem && topfree && psfree ; then Judage && meminfo else echo -e "\033[31m檢查 TOP\\PS\\FREE 命令是否正常安裝\033[0m" fi
運行上面腳本,記得安裝bc,命令如下:
#apt install bc
測試效果如下:
阿里雲服務器內存過高的解決方法