1. 程式人生 > >linux執行緒數限制與zabbix監控

linux執行緒數限制與zabbix監控

 

Linux最大執行緒數限制及當前執行緒數查詢

最大執行緒數計算方式:

n = total_memory/128k;

Linux使用者執行緒數限制而導致的程式異常為 java.lang.OutOfMemoryError:unable to create new native thread

查詢系統支援的最大程序數與執行緒數,一般會很大,相當於理論值

/proc/sys/kernel/pid_max

/proc/sys/kernel/threads-max

系統限制某使用者下最多可以執行多少程序或執行緒

當前使用者可用最大執行緒數:ulimit -u

想要修改這個值:
centos 6.*可以修改/etc/security/limits.d/90-nproc.conf
centos 7.*可以修改/etc/security/limits.d/20-nproc.conf

查詢當前某程式的執行緒或程序數

# pstree -p `ps -e | grep java | awk '{print $1}'` | wc -l

# pstree -p 程序號 | wc -l

上面用的是管道,關於管道:管道符號"|"左邊命令的輸出作為右邊命令的輸入

查詢當前整個系統已用的執行緒或程序數

pstree -p | wc -l

以上參考https://www.cnblogs.com/nizuimeiabc1/p/5593637.html

 

zabbix監控當前使用執行緒數

客戶端:使用pstree -p | wc -l為鍵值

pstree以樹結構顯示程序,是linux很有用的一個命令,可列印系統當前各個程序父子關係。但是centos7預設並沒有安裝pstree,所以會有pstree:command not found
實際上在linux平臺要安裝psmisc包,安裝方式使用命令即可:yum install psmisc -y

增加自定義監控項的鍵值:echo "UserParameter=thread.num,pstree -p | wc -l" >> /etc/zabbix/zabbix_agentd.conf

然後重啟zabbix_agentd客戶端

服務端:在Template OS Linux模板中新增監控項與觸發器,閥值8000

 

測試,服務端get一下資料,看能不能拿到

/usr/local/zabbix/bin/zabbix_get -s xxx.xxx.xxx.xxx -p 10050 -k 'thread.num'

把閥值臨時設為200,看能不能接到告警郵件