linux查看java線程
❶ linux最大線程數限制及當前線程數查詢
查看系統允許的最大線程數:
Linux無法直接控制單個進程可擁有的線程數,但有參考公式max = VM/stack_size,默認stack為8k,可通過降低stack大小或增加虛擬內存來調大每個進程可擁有的最大線程數;
對於支持多線程的程序如java,有可能會遇到一個進程無法創建更多線程的情形,其原因多種多樣,而OS端可能由此參數造成.
查看系統允許的最大進程數:
ulimit -a 顯示當前所有的資源限制
root用戶下執行 ulimit -a 然後查看 max user processes 這個值通常是系統最大線程數的一半:/proc/sys/kernel/threads-max/2
普通用戶下 ulimit -u 出現的max user processes的值 默認是 /etc/security/limits.d/20-nproc.conf(centos6 是90-nproc.conf) 文件中的
普通用戶默認是1024
打開/etc/security/limits.conf (部分的系統是在/etc/security/limits.d/90-nproc.conf)
設置限制數量,第一列表示用戶,* 表示所有用戶
soft nproc :單個用戶可用的最大進程數量(超過會警告);
hard nproc:單個用戶可用的最大進程數量(超過會報錯);
soft nofile :可打開的文件描述符的最大數(超過會警告);
hard nofile :可打開的文件描述符的最大數(超過會報錯);
重啟後生效
reboot
查詢當前某程序的線程數
pstree -p 進程號 | wc -l
管道符號"|"左邊命令的輸出作為右邊命令的輸入
直接修改/etc/security/limits.conf 文件中的 * soft nproc 65535 值後,普通用戶最大進程數無法達到65535 ,因為用戶的max user processes的值,最後是受全局的kernel.pid_max的值限制。也就是說kernel.pid_max=1024 ,那麼你用戶的max user processes的值是127426 ,用戶能打開的最大進程數還是1024。
永久修改系統最高進程數的方法
在/etc/sysctl.conf中添加kernel.pid_max = 65535
vim /etc/sysctl.conf
kernel.pid_max = 65535
或者:
echo "kernel.pid_max = 65535" >> /etc/sysctl.conf
然後重啟機器。
臨時修改的方法:
echo 65535 > /proc/sys/kernel/pid_max
所以以上都操作完成後,才算是正確修改了max user processes 的值
❷ 怎麼用linux命令查看jvm進程有幾個線程
在LINUX上可以使用kill -3 pid > thread.info來取得當前JVM線程的信息;
jstack 這個是用來查看jvm當前的thread mp的。可以看到當前Jvm裡面的線程狀況。
這個對於查找blocked線程比較有意義;
❸ linux中我想用jstack捕獲java線程,捕獲10次,每隔5秒捕獲一次並把捕獲的生成文件,然後生成壓縮包文件
sh腳本,加上定時任務
❹ 如何在 Linux 上查找哪個線程cpu利用率最高
可以用 top 命令看
1.找出cpu耗用厲害的進程pid, 終端執行top命令,然後按下shift+p (shift+m是找出消耗內存最高)查找出cpu利用最厲害的pid號
2.根據上面第一步拿到的pid號,top -H -p pid 。然後按下shift+p,查找出cpu利用率最厲害的線程號,比如top -H -p 1328
3.將獲取到的線程號轉換成16進制,去網路轉換一下就行
4.使用jstack工具將進程信息列印輸出,jstack pid號 > /tmp/t.dat,比如jstack 31365 > /tmp/t.dat
5.編輯/tmp/t.dat文件,查找線程號對應的信息
❺ 怎麼通過linux命令去分析jvm裡面那個線程阻塞了
仍然需要生成jvm進程的thread mp data,便於與Linux top命令輸出關聯。步驟如下:
1)執行top命令,或使用-H選項(顯示所有線程),找到相關的高CPU的PID
2)生成thread mp 快照(kill -3 PID)。
3)將top命令輸出PID轉換為HEX格式(16進制)
4)在thread mp data中搜索nid=<Hex PID>
5)分析受影響的thread和stack trace,精確定位代碼。
top output sample
[plain] view plain
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
...........
22111 userWLS 9 0 86616 84M 26780 S 0.0 40.1 0:00 java
❻ 利用linux命令如何查進程中有多少線程
1。 使用top命令,具體用法是 top -H
加上這個選項,top的每一行就不是顯示一個進程,而是一個線程。
2。 使用ps命令,具體用法是 ps -xH
這樣可以查看所有存在的線程,也可以使用grep作進一步的過濾。
3。 使用ps命令,具體用法是 ps -mq PID
這樣可以看到指定的進程產生的線程數目。
更進一步,其實一些系統監控工具,在本質上也是讀取的系統產生的文件罷了。比如說進程這個事情,
看看這個目錄吧,/proc/5000/ 這裡面有你所有想要的。其實stat代表著當前的一些信息。
使用ps命令來查看進程的時候,進程狀態分別對應的含義如下:
D 不可中斷睡眠 (通常是在IO操作) 收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生
R 正在運行或可運行(在運行隊列排隊中)
S 可中斷睡眠 (休眠中, 受阻, 在等待某個條件的形成或接受到信號)
T 已停止的 進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行
W 正在換頁(2.6.內核之前有效)
X 死進程 (未開啟)
Z 僵屍進程 進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放BSD風格的
< 高優先順序(not nice to other users)
N 低優先順序(nice to other users)
L 頁面鎖定在內存(實時和定製的IO)
s 一個信息頭
l 多線程(使用 CLONE_THREAD,像NPTL的pthreads的那樣)
+ 在前台進程組