成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

打造高性能Java應用需掌握的5大知識

瀏覽:149日期:2022-09-05 18:16:43

這篇文章節選自《java performance》,對java性能比較關心的同學大概都知道這本書,性能這個東西可能是很多同學在日常寫java code的時候很少去關心的,但是在我們寫code的過程中確又時時離不開對程序性能的影響,小到我們使用位運算來實現算術運算,大到我們對JAVA代碼的總體架構設計,性能其實離我們很近。本片文章主要提到幾個點,主要是在性能領域我們比較關注的一些問題,并且是有啟發性的,如果同學對性能較感興趣,那么我們可以一起深入研究各個點。

對于性能調優,通常會有三個步驟:1,性能監控;2,性能剖析;3,性能調優

我們對于操作系統的性能關注主要在下面幾個點上:CPU利用率、CPU調度執行隊列、內存利用率、網絡I/O、磁盤I/O。

1.CPU利用率

對于一個應用來說,為了讓應用達到最好的性能和可擴展性,我們不僅僅要充分利用CPU周期內可用的部分,而且要讓這部分CPU的使用更有價值,而不是浪費。能夠讓CPU的周期利用的更充分對于多線程應用運行在多處理器和多核系統上至很有挑戰性的。另外,當CPU達到飽和狀態的時候并不能說明CPU的性能和伸縮性已經達到了最佳的狀態。為了區分應用是如何利用CPU資源的,我們必須從操作系統級別來檢測。在很多操作系統上,CPU的利用率統計報告通常包括用戶和系統或內核對操作系統的使用。用戶對CPU的使用是指應用用來執行應用代碼執行所需要的時間。相比之下,內核和系統對CPU的使用是指應用用來執行操作系統內核代碼鎖花費的時間。高的內核或者系統CPU使用率可以表明共享資源緊迫,或者是有大量的I/O設備交互。理想的狀態為了提高應用的性能和伸縮性,讓內核或系統CPU時間為0%,因為花在執行內核或系統代碼的時間是可以用來執行應用代碼的。因此CPU使用優化的一個正確方向就是盡可能減少CPU花在執行內核代碼或者系統代碼上的時間。

對于計算密集型應用,性能監控比監測用戶CPU使用和內核或系統CPU使用要更深層次,在計算密集型應用中,我們需要監測CPU時鐘周期內的執行執行條數(Instructions per clock;IPC)或者是每條CPU執行所使用的CPU周期(cycles per instruction;CPI)。對于計算密集型應用來說我們從這兩個維度來監測CPU是不錯的選擇,因為現代操作系統的打包CPU性能報告工具通常只會打印CPU的利用率,而不會打印CPU周期內CPU用來執行指令的時間。這意味著當CPU正在等待內存中的數據的時候,操作系統CPU性能報告工具也會認為CPU是正在使用的狀態,我們把這個場景叫做“Stall”,“Stall”場景經常會發生,比如在CPU正在執行指令的任何時候,只要是指令需要的數據沒有準備好,也就是沒有在寄存器或者CPU緩存內,都會發生“Stall”場景。

當“Stall”場景發生的時候CPU會浪費時鐘周期,因為CPU必須要等待指令需要的數據到達寄存器或者緩沖器。而且在這個場景中,數百個CPU時鐘周期被浪費是很正常的事情,因此在計算密集型應用中,提高性能的策略是減少“Stall”場景的發生或者是增強CPU的緩存使用從而使得更少的CPU周期因為等待數據而浪費掉。這類的性能監控知識已經超越了本書的內容,需要性能專家的幫助了。然而,后面講到的Oracle Solaris Studio Performance Analyzer這種性能剖析工具將會包括此類數據。

2.CPU調度隊列

除了對CPU使用的監控,我們也可以通過監控CPU執行隊列來檢查系統是否已經滿負載。執行隊列是用來存儲輕量級進程,這些進程通常是已經準備好執行了但是正在等待CPU調度而在調度隊列等待的一種狀態,當輕量級進程別當前處理器能來得及處理的數量更多的時候,調度隊列將會產生。比較深的CPU調度隊列表明系統已經滿負荷了。系統的執行隊列深度等于虛擬處理器執行不了的等待數,虛擬處理器數等于系統的硬件線程數。我們可以用java的api來拿到虛擬處理器數,Runtime.avaliableProcessors()。當執行隊列深度大于虛擬處理器個數的四倍或更多的時候,操作系統將會出現反應遲鈍的現象。

對于CPU調度隊列的檢測的一個通用指導是當我們發現隊列深度高于虛擬進程數一倍的時候就要注意了,但是沒有必要立即采取行動。當大于三倍或四倍或者更高的時候就要注意了,解決問題刻不容緩。

通常有兩個可選的途徑來觀察隊列的深度,第一個是通過增加CPU來分擔負載或者減少對現有CPU的負載。這種途徑從本質上減少了每個執行單元的負載線程數,從而減少執行執行隊列的深度。

另外的一種途徑是通過剖析系統運行的應用來增加CPU的使用率,換個說法就是尋找一種可以減少花費在垃圾回收上的CPU周期,或者尋找更好的算法來以更少的CPU周期來執行CPU指令。性能專家通常專注后面的一種途徑:減少代碼的執行路徑長度和更好的CPU指令選擇。JAVA程序員可以通過更好的執行算法和數據結構來提高代碼的執行效率。

3.內存利用率

除了CPU的使用率,系統的內存屬性也需要被監控,這些屬性包括比如:分頁、交換、鎖、多線程引起的上下文交換等。

交換通常發生在當應用需要的內存大于實際的物理內存的時候,處理這種情況操作系統通常會配置一個相應的區域叫做交換區。交換區通常位于物理磁盤上,當物理內存內應用耗盡的時候,操作系統會將一部分內存數據暫時交換到磁盤空間上,這部分內存區域通常是訪問頻率最低的一塊區域,而不會影響比較“忙”的內存區域;當被交換到磁盤區域的內存又被應用訪問的時候,這個時候就需要從磁盤交換區將以頁為單位讀入內存,交換會影響應用的性能。

虛擬機的垃圾收集器在交換的時候性能非常差,因為垃圾收集器所訪問的大部分區域都是不可達的,也就是垃圾收集器會引起交換活動的發生。場景是戲劇性的,如果垃圾收集的堆區域已經被交換到了磁盤空間,這個時候將會以頁為單位發生交換,這樣才能夠被垃圾收集器所掃描到,在交換的過程中會戲劇性的引發垃圾收集器的收集時間延長,這個時候如果垃圾收集器是“Stop The World”(使得應用響應停止)的,那么這個時間就會被延長。

4.網絡I/O

分布式JAVA應用的性能和伸縮性會受到網絡帶寬和網絡性能的限制。例如,如果我們往網絡接口發送比他能夠處理的更多的數據包,數據包將會堆積在操作系統的緩沖區內,這將會引發應用延遲,另外其他的情況也會導致網絡應用的延遲。

區分和監控的工具通常在操作系統的打包工具中很難找到。盡管linux提供了netstat命令,linux和solaris都提供了網絡使用情況的實現,他們都提供了包括每秒發包、接包、錯包、沖突等信息的統計。在以太網中,一小部分包沖突是很正常的現象。如果錯包情況比較多那可能是網卡有問題了。同時,盡管netstat可以統計網絡接口的發送和接收數據情況,這很難斷定網卡是否被充分利用。例如,如果netstat -i顯示現在每秒有2500個包從網卡發出,但是我們仍然無法判斷當前的網絡利用率是100%還是1%,我們僅僅能夠知道目前有流量。這僅僅是在不知道網絡包大小的情況下能夠得到的結論。簡單的說我們無法通過linux和solaris提供的netstat來判斷當前網絡是否影響了性能。我們需要一些其他的工具在我們的JAVA應用運行的過程中來監測網絡。

5.磁盤I/O

如果應用有對磁盤進行操作,我們需要對磁盤進行監控,來監測可能出現的磁盤性能問題。一些應用是I/O密集型的,比如數據庫。磁盤的使用通常還存在于應用日志系統,日志通常是我們用來記錄系統運行過程中重要信息的。

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
7777精品伊人久久久大香线蕉超级流畅 | 国一区二区在线观看| 欧美丝袜丝交足nylons图片| 亚洲成人动漫一区| 亚洲一区日韩| 夜夜精品视频一区二区 | 欧美另类videos死尸| 美脚の诱脚舐め脚责91| 在线亚洲高清视频| 免费视频一区二区| 在线观看视频一区二区欧美日韩| 日日夜夜精品免费视频| 久久午夜激情| 裸体歌舞表演一区二区| 欧美午夜免费电影| 韩国视频一区二区| 欧美日韩午夜在线| 国产精品一品视频| 精品国产sm最大网站免费看| 91一区二区在线观看| 国产亚洲一区字幕| 欧美日韩一区自拍| 亚洲视频 欧洲视频| 国产一级精品aaaaa看| 一区二区三区蜜桃网| 美女精品国产| 久久精品国产成人一区二区三区| 欧美日韩午夜在线视频| 国产精品性做久久久久久| 欧美成人女星排名| 色综合久久中文字幕| 国产精品私人自拍| 亚洲久久一区| 午夜久久久久久| 欧美在线视频你懂得| 国产成人综合在线观看| 精品国产亚洲一区二区三区在线观看| 91首页免费视频| 亚洲日穴在线视频| 色琪琪一区二区三区亚洲区| 国产在线视频一区二区三区| 91麻豆精品国产91久久久更新时间| 国产成人在线观看免费网站| 久久久久久久久久久久久久久99 | 精品国产乱码久久久久久1区2区 | 91在线观看视频| 欧美激情一区在线观看| 亚洲激情精品| 奇米四色…亚洲| 欧美一级欧美三级在线观看| av中文字幕不卡| 亚洲色图视频网| 在线看日韩精品电影| 成人国产电影网| 最新中文字幕一区二区三区| 久久久久久久久久久久久久一区 | 一区二区免费在线播放| 在线日韩一区二区| 处破女av一区二区| 亚洲天堂a在线| 在线日韩一区二区| aaa亚洲精品| 亚洲最快最全在线视频| 欧美日韩精品欧美日韩精品一| 91视频国产观看| 一级女性全黄久久生活片免费| 欧美日韩一区成人| 欧美成人综合| 五月综合激情日本mⅴ| 日韩一区二区三区在线观看| 精品成人国产| 久久99国内精品| 欧美国产日本视频| 狼狼综合久久久久综合网| 成人av在线播放网址| 成人欧美一区二区三区黑人麻豆 | 91碰在线视频| 一区二区三区精品在线| 56国语精品自产拍在线观看| 黄色成人av网站| 麻豆精品一区二区综合av| 久久综合色天天久久综合图片| 一区精品久久| 麻豆精品新av中文字幕| 久久久不卡网国产精品二区| 99精品久久| 国产乱码精品一区二区三| 日韩理论电影院| 亚洲欧洲精品一区二区| 麻豆成人综合网| 久久久天堂av| 久久综合给合久久狠狠色| www.av精品| 日本大胆欧美人术艺术动态| 国产人久久人人人人爽| 欧美伊人久久久久久午夜久久久久| 欧美激情视频一区二区三区免费| 日韩精品视频网| 国产亚洲婷婷免费| 欧美综合欧美视频| 精品不卡一区| 成人午夜视频在线观看| 亚洲一区二区三区小说| 欧美精品一区二区三区蜜臀| 色婷婷久久一区二区三区麻豆| 96av麻豆蜜桃一区二区| 日产精品久久久久久久性色| 欧美国产成人精品| 欧美日韩夫妻久久| 亚洲国产午夜| 丁香婷婷综合网| 亚洲成人一区二区| 国产亚洲精品bt天堂精选| 久久先锋资源| 国产东北露脸精品视频| 亚洲香肠在线观看| 久久久国产一区二区三区四区小说| 色视频成人在线观看免| 国产综合18久久久久久| 国产一区二区三区蝌蚪| 亚洲综合丝袜美腿| 久久综合国产精品| 欧美在线一二三| 日韩午夜激情| 欧美一区2区三区4区公司二百| 久久99久久99精品免视看婷婷| 亚洲欧美综合在线精品| 欧美videos中文字幕| 久久国产88| 国产精品黄色| 成人黄色免费短视频| 免费在线观看成人| 亚洲一区二区不卡免费| 中文字幕免费不卡在线| 欧美一区二区三区视频免费| 久久久99爱| 亚洲激情不卡| 91浏览器打开| 国产伦精品一区二区三区免费迷 | 日本三级亚洲精品| 国产精品成人在线观看| 精品日韩av一区二区| 欧美伦理电影网| 久久性色av| 国产日韩欧美三区| 欧美日韩一区在线播放| 国产99精品国产| 精品无人码麻豆乱码1区2区 | 好看不卡的中文字幕| 国产成人小视频| 日本视频一区二区三区| 亚洲精品免费在线| 国产欧美一区二区精品忘忧草| 欧美一区二区三区四区五区| 91国产丝袜在线播放| 亚洲欧美日韩国产| 一区二区在线不卡| 欧美一区国产一区| av在线播放一区二区三区| 国产精品亚洲а∨天堂免在线| 蜜臀精品久久久久久蜜臀 | 成人午夜看片网址| 免费欧美在线视频| 性欧美大战久久久久久久久| 亚洲欧美在线视频| 日本一区二区三区四区在线视频 | 国产超碰在线一区| 国产中文字幕一区| 精品亚洲porn| 久草这里只有精品视频| 免费成人在线观看| 日韩一区精品字幕| 亚洲chinese男男1069| 亚洲国产视频网站| 亚洲日本电影在线| 综合电影一区二区三区| 国产精品久久久久四虎| 国产精品久99| 亚洲欧洲日韩av| 亚洲色图制服诱惑| 亚洲欧洲制服丝袜| 最近中文字幕一区二区三区| 国产精品麻豆欧美日韩ww| 国产精品系列在线| 国产精品视频线看| 国产精品久久毛片a| 中文字幕佐山爱一区二区免费| 国产精品久久久久永久免费观看 | 日韩美女在线视频| 日韩一级片网址| 精品美女一区二区三区| 日韩精品中文字幕在线一区| 欧美大片在线观看| 欧美精品一区二区三| 久久久久久久久久久99999| 国产欧美视频在线观看| 国产精品第一页第二页第三页| 亚洲乱码国产乱码精品精可以看 | 欧美亚洲图片小说| 欧美精品久久久久久久多人混战|