1. 程式人生 > >java多執行緒程式效能調優 優化過程

java多執行緒程式效能調優 優化過程

我, 一多年c++開發,由於專案原因需要對一個性能底下的多執行緒java程式進行調優,百度google了幾把,媽蛋,沒有發現指導如何java執行緒調優的文章啊,都是一些java使用規範,我去,那我大java的開發工程師都是怎麼調優的啊, 那我大C++工程師就帶領大家如何java調優了,下面就轉入正題了!

有句話叫“只要推力大,板磚也能飛上天”, 那換到我們it, 只要cpu強大,那麼再爛的程式也能跑的飛快,但是cpu肯定是不夠強大的,她是不夠用,不然也就沒多核心,分散式什麼事情了,那java中我們如何找出我們的程式碼中的多執行緒瓶頸呢,比如這個執行緒當前在幹什麼?哪個執行緒的cpu 佔用綠100%了?哪個執行緒當前正在等待鎖?

下面主要用的命令有兩個top 以及jstack

 在命令列輸入top 後我們看到如下內容

找到需要調優的程序id 24207 (ps:不會top 命令的自行百度去),

執行命令 top -H -p 24207  看到如下內容

 

這個命令上面顯示的pid 就是物理的執行緒id,只是命令顯示成了pid, 這個階段我們就以及進入了一個java程序的內部, 可以看到每一個執行緒使用的cpu了, 比如18827就是一個執行緒, 它佔用1% 的cpu, 如果理論上1% 是會跑到100%的, 那現在為什麼只跑到1%?, 我們針對現在情況進行分析, 那現在就要用到我們另外一個工具 jstack 了;

執行命令sudo jstack 18798 > /tmp/jstack.log  在檔案中我們找到nid=0x498b(執行緒ID 18827的16進位制)


神奇吧, 居然發現了呼叫堆疊, 我們的執行緒居然在睡覺,這麼懶得執行緒它的cpu 肯定上不去只有1%也就不奇怪了,  那查下為毛在睡覺吧.修改好了就能上天上100%的了!

百萬qps不再是夢啊!

推薦個程式碼, json 格式化線上網站:www.format123.com  點選開啟連結