統(tǒng)計zabbix_server及其子進程實際使用總內(nèi)存
背景
擴容當前zabbix監(jiān)控服務器古话,需要事先統(tǒng)計zabbix_server進程使用總內(nèi)存。
解決方案
for pid in `ps -C zabbix_server -o pid --no-heading`; do grep Pss /proc/$pid/smaps;done|awk '{sum+=$2};END{print sum/1024/1024"G"}'
- 用ps命令統(tǒng)計所有zabbix_server進程的rss值進行累加得出占用總內(nèi)存会傲,此種方法不對先紫,會導致結(jié)果偏大。如下圖搅轿,我本機總內(nèi)存20G,但使用該方法算出來有24G熬北。
-
正確方法是累計/proc/$zabbixpid/smaps中的Pss值疙描。
zabbix進程總內(nèi)存統(tǒng)計.png
解釋(引用大牛原文)
很多人通過累加 “ps aux” 命令顯示的 RSS 列來統(tǒng)計全部進程總共占用的物理內(nèi)存大小,這是不對的讶隐。RSS(resident set size)表示常駐內(nèi)存的大小起胰,但是由于不同的進程之間會共享內(nèi)存,所以把所有進程RSS進行累加的方法會重復計算共享內(nèi)存巫延,得到的結(jié)果是偏大的效五。
正確的方法是累加 /proc/[1-9]*/smaps 中的 Pss 。/proc/<pid>/smaps 包含了進程的每一個內(nèi)存映射的統(tǒng)計值炉峰,詳見proc(5)的手冊頁畏妖。Pss(Proportional Set Size)把共享內(nèi)存的Rss進行了平均分攤,比如某一塊100MB的內(nèi)存被10個進程共享疼阔,那么每個進程就攤到10MB戒劫。這樣,累加Pss就不會導致共享內(nèi)存被重復計算了婆廊。