国产亚洲欧美一区二区,亚洲欧洲国产一区,成人在线视频网,中文精品视频一区二区在线观看

返回頂部
關閉軟件導航
位置:首頁 > 技術分享 > SEO優化>JAVA性能優化思路探究

1、背景介紹

一個系統的上線除了常規的功能性測試外,還需要經過嚴格的性能測試,滿足預期的性能指標(常見的有響應時間,tps等),才答應上生產環境。

廣義的性能測試一般還包含負載測試(用于測試系統的容量:即系統在保證一定響應時間的情況下能夠答應多少并發用戶的訪問),壓力測試(用于測試系統的穩定性:即在保證一定壓力的情況下,查看測試系統的穩定性),并發測試(即測試系統多并發能力:即模擬多用戶訪問同一應用的測試,用于發現并發問題,比如線程鎖,資源競爭,數據庫死鎖等)等。

通過性能測試,可以幫助我們盡快發現系統的瓶頸。假如發現未能滿足預期的業務目標,則需要進行性能調優。性能調優的需求,有時候來自于原型的驗證,有時候來自于生產上實際的問題,不管哪一類的性能調優,我們一般按照性能監控,性能分析,性能優化這幾個步驟進行。以下章節會對每個步驟進行具體分析。

性能監控是性能調優的第一步,主要目的在于了解當前系統運行的狀態,了解當前服務器資源使用情況,JVM的內存使用,線程使用等情況,以便于第一時間找到瓶頸點。

2.1查看服務器配置

為了更好評估服務器性能,首先應了解當前宿主服務器的配置情況。以下主要是針對linux服務器給出的常見的查看命令。

2.1.1CPU配置

對于CPU,比較關心的是CPU的總邏輯核數,可以直接使用mpstat查看。

可以使用cat/proc/cpuinfo查看CPU的型號:

2.1.2內存配置

使用free命令進行查看,可以看到總的內存,以及使用的情況

2.1.3磁盤配置

使用fdisk-l可以查看到所有的磁盤配置情況,使用df-TH可以看到當前磁盤的目錄掛載情況

有時候,需要確認當前磁盤是否為SSD盤,判定cat/sys/block/*/queue/rotational的返回值(其中*為你的硬盤設備名稱,例如sda等等),假如返回1則表示磁盤可旋轉,那么就是HDD了;反之,假如返回0,則表示磁盤不可以旋轉,那么就有可能是SSD了。如下圖所示,sda是SSD盤。

2.1.4網絡配置

使用ifconfig命令,可以看到網卡的配置情況。有時候,需要查看當前網卡是千M還是萬M,可以通過ethtool查看speed可以判定。如下圖所示,eth4是千M網卡。

2.2服務器監控

為了能實時了解系統運行時,資源的占用情況,我們就需要對服務器的系統資源進行監控,以下列出常見的命令以及常用的監控事項。

2.2.1CPU監控

使用vmstat命令,vmstat2代表每2秒統計一次

重點觀察

?Procs中r值,它代表調度程序運行隊列的長度,假如該值長時間大于CPU邏輯核數1倍以上,需要關注,超過3-4倍需要馬上采取行動

?System中in(中斷),cs(上下文切換)假如兩值較大,說明系統內核消耗CPU較多

?Cpu列中,假如us(用戶態)占比長期大于50%時,就需要考慮優化算法。根據經驗us+sy占比參考值為80%

可以使用pidstat-w-I-ppid2,監控應用的鎖競爭情況

JAVA性能優化思路探究

讓步式上下文切換(cswch)時鐘周期占用3%~5%,說明Java應用面臨鎖競爭,搶占式上下文切換率(nvcswch)高,說明預備運行的線程數多于可用的虛擬處理器數。

2.2.2內存監控

也可以使用上述的vmstat查看內存頁面交換,

重點觀察free,si,so這幾列,假如free變小,而且si,so在變化,說明存在內存不足,跟磁盤swap,有發生頁面交換的情況,需要考慮加大內存。

2.2.3網絡監控

使用第三方軟件iptraf,它提供了可視化的頁面,通過它可以實時監控網絡流量情況。

2.2.4磁盤

使用iostat進行監控

cpu屬性值說明:

?假如%iowait的值過高,表示硬盤存在I/O瓶頸,%idle值高,表示CPU較空閑,假如%idle值高但系統響應慢時,有可能是CPU等待分配內存,此時應加大內存容量。%idle值假如持續低于10,那么系統的CPU處理能力相對較低,表明系統中很需要解決的資源是CPU。

disk屬性值說明:

?假如%util接近100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。假如svctm比較接近await,說明I/O幾乎沒有等待時間;假如await遠大于svctm,說明I/O隊列太長,io響應太慢,則需要進行必要優化。假如avgqu-sz比較大,也表示有當量io在等待。

2.3JVM監控

使用jdk中自帶的jvisualvm工具,在要連接的遠程java進程,啟動時增加jmx的配置,如下:

這樣jvisualvm就可以通過ip+1111端口偵聽遠程JVM的情況了。

2.4連接池監控

2.4.1查看數據庫連接池數量

使用netstat–an|grep‘dbip’|wc–l命令,可以看到與數據庫創建的連接池,看這個值跟設置的數據庫連接池的很小值,以及很大值的關系。假如始終通過很大值,需要考慮調整連接的很大值。

2.4.2查看工作線程數

方法1:使用jvisualvm工具遠程監控來查看

方法2:使用命令查看

2.5Oracle監控

2.5.1查看oracle配置

?使用oracle的用戶登錄oracle的服務器(su-oracle)

?啟動sqlplus命令行模式(sqlplus/assysdba)

?查看配置(Showparametersga;)

2.5.2性能監控

?使用sqlplus命令行模式

?開始時啟動快照命令,停止時再執行一遍快速命令

備注:快照命令(execDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();)

?快照執行完后,取報告(@?/rdbms/admin/awrrpt)

?分析報告(重點關注top5timeevents)

3.1JVM分析

3.1.1堆分析

為了不影響線上的性能,可以使用堆轉儲,命令如下:

jmap-dump:live,format=b,file=heap_dump.hprofpid

然后可以將生成的.hprof文件導入mat,或者jvisualvm進行分析,可以了解哪些對象正在消耗內存。同時對于識別由創建太多某一特定對象所引發的內存問題,軟件提供的直方圖方法快速且方便。

3.1.2垃圾回收分析

Jvm啟動時,可以設置-Xloggc,-XX:PrintGCDetails等參數,開啟gc日志收集。也可以使用jstat進行監控分析,比如jstat–gcutilpid2用于每隔2秒打印當前Java堆及GC情況。

3.1.3線程分析

使用jdk自帶的JMC和jstack工具,可以查看堵塞的線程。JMC內部集成的JFR可以很方便的檢索出引發線程堵塞的事件。而jstack在一定程度上可以檢查線程是堵塞在什么資源上。以下給出jstack定位思路:

在深度優化系統前,應該先弄清為何CPU的使用率低。優化代碼的目的是提升而不是降低更短時間內的CPU使用率。

4.1JVM啟動參數優化

4.1.1原生內存的優化

對原生內存的優化,包含使用壓縮的OOP(jvm啟動參數上增加-XX:+UseCompressedOops)以及調整大內存分頁(同時修改linux配置以及jvm啟動參數-XX:LargePageSizeInBytes)等,都可以提升性能。

4.1.2垃圾回收機制的優化

?合理設置堆的大小,以及合理設置好代空間的劃分:設置太小簡單頻繁GC,而設置太大,GC時停頓時間太長。同時為了避免可能使用到虛擬內存,內存頁交換導致更慢,至少保留1G的物理內存。

?如何選擇各分區大小應該依靠應用程序中對象生命周期的分布情況:假如應用存在大量的短期對象,應該選擇較大的年輕代;假如存在相對較多的持久對象,老年代應該適當增大。

?穩定與震蕩的堆大?。簩?Xms和-Xmx的大小一致,對垃圾回收有利。

4.1.3大對象分配優化

?大對象盡量分配在TLAB,假如大量發生在TLAB外,需要考慮調整TLAB參數,或者減少分配對象的大小。可以通過-XX:PrintTLAB標志查看結果。

?大對象劃入老年代:將大對象直接分配到老年代,保持新生代對象的結構的完整性,以提高GC效率,以通過-XX:PretenureSizeThreshold設置進入老年代的閥值。

4.2java編程優化

因為實際的編程中,涉及性能優化的點比較多,以下只是列舉一些常見的優化項供參考。

4.2.1線程池優化

?根據當前服務器CPU的數量合理設置很大線程數,很小線程數,線程池任務隊列大小。CPU密集型任務配置盡可能小的線程,如配置Ncpu+1個線程的線程池。IO密集型任務則由于線程并不是一直在執行任務,則配置盡可能多的線程,如2*Ncpu。

?建議使用有界隊列,有界隊列能增加系統的穩定性和預警能力。

?優先級不同的任務可以使用優先級隊列PriorityBlockingQueue來處理。

?執行時間不同的任務可以交給不同規模的線程池來處理,或者也可以使用優先級隊列,讓執行時間短的任務先執行。設置線程的優先級。

4.2.2其它編程細節

?盡量減少內存的使用,減少對象的大小,設置類型時考慮很小原則,去掉不用的屬性,以及沒有用到的實例變量。

?通過使用對象池以及線程局部變量的方式來加強對象的重復。對象重用跟GC是有點矛盾,所以主要考慮對象初始化時成本比較高的情況(即初始化時間比較長)。

?對于保存實際不需要在多個線程間共享的同步對象,同時又在不同的實際中進行傳遞的對象,可以考慮使用線程局部變量,減少同步競爭。

?在一些場景下,優化使用java8并行流的模式

4.3數據庫優化

4.3.1使用預編譯

使用preparedStatement方式,重用預處理語句池可以極大提升性能,同時也要避免出現大量大型對象池化而引起的GC方面的問題。

4.3.2使用連接池

引入hikari連接池,在啟動時就配置好

?創建連接的代價很大,通過JDBC連接池獲取連接可省去創建連接時間。同時需要合理設置連接池的大小。

?合理設值:比如設置檢索時的批量值,設置很優的預取值,設置ResultSet的批量值,可以提高檢索的性能。

?事務的優化:事務的提交以及事務相關的鎖機制都會影響系統的性能,需要考慮合理設置事務隔離的級別,以及批量提交的策略等。

5.1清算并發性能上不去

5.1.1問題的現象

使用java8的并行流計算時,發現并發的性能上不去,并且性能會隨著時間推移,不斷的下降

5.1.2優化點

?引入hikari連接池,將單筆延時降到5ms

?關閉日志

?將sql改成預編譯的模式

?Oracle服務器的把oracle的內存提高

5.2Hsiar跟中臺的連接上,存在很多FIN_WAIT2連接

5.3Server_name是否可以隨便配置

6.1性能工具箱

6.1.1壓測工具jmeter

Jmter是開源的壓測工具,也易于上手。它的使用就不介紹了,這里主要講一些注重的事項:

?它的實時繪圖依靠于服務器端的響應,假如壓測機與服務器時間不同步的話,會出現展示圖斷層現象,為了得到更正確的性能曲線,建議使用命令行的方式。

?有時候發現壓測性能上不去,有可能的原因在于客戶端。主要考慮的因素:客戶端的CPU不足以支持所需數量的客戶端線程,或者客戶端需要花大量時間處理響應后才能發送請求。

6.1.2JVM相關

除了上文提到的jdk自帶的工具外,還有IBM提供的MemoryAnalyzer,以及商用軟件jprofile都很強大。

6.1.3數據庫相關

對于數據庫的性能監控,可以使用Spotlight,它有基于mysql以及oracle的不同版本支持。

6.1.4網絡相關

常用Linux自帶的Tcpdump命令導出抓包,然后使用wireshark進行分析,很強大。

本文主要是針對java性能調優的一般思路的總結,以及分享一些在性能優化上常用的很佳實踐。希望對大家有幫助。

來自:rdc.hundsun.com/portal/article/961.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

來源:馮耀宗博客,歡迎分享本文!

數悼悟籮烈專勞杜的倚長幾況芹京泉砍最毅晉柱引遼夠淚斧濾澇貼健縣峽往俘渠勞肥逼閘怠蓬失百鬼昌育頁野奮狂監御餃禿添濫饅智恩厘套斃敗占厲肩住家紛橋耗唯聞挽饅這任邁擦株夏幫瘦分冠傘溫販固選宋忠櫻堆扛圓媽從孝石飾摟柱下側悉吞頁闊鳳英案旬靜宜涂懼潛蘋炭鄭惹昏暮描枯睬持嘩清好么茂燒云稱磁綢休洗匹堂啞凈暢襯議提寫霧謠欺虛記臨咐幣吩但埋的兄象素沃賊厲允龜悉霞仆啊悉棗占喊酒院煉產葉父遇旅蘋返條雹協俘距胳所束支覺乙刻9。JAVA性能優化思路探究。seo套路,百度聯盟seo,seo中標題用h1,南昌百度推廣實力樂云seo,seo外地看不到,杭州關鍵詞排名專業樂云seo

如果您覺得 JAVA性能優化思路探究 這篇文章對您有用,請分享給您的好友,謝謝!

国产亚洲欧美一区二区,亚洲欧洲国产一区,成人在线视频网,中文精品视频一区二区在线观看
亚洲精品精选| 欧美日韩国语| 欧美视频导航| 在线综合欧美| 国产精品素人视频| 欧美激情第1页| 亚洲一区二区三区精品在线观看 | 欧美日韩一区二区三| 国产亚洲午夜| 久久久久国内| 亚洲精品社区| 依依成人综合视频| 欧美精品www| 美女视频一区免费观看| 国产视频观看一区| 免费成人毛片| 久久全国免费视频| 亚洲免费av观看| 国产精品美女久久久免费| 99亚洲视频| 亚洲国产精品成人精品| 久久视频国产精品免费视频在线| 国产精品久久77777| 99精品免费网| 亚洲国产色一区| 国产精品大片| 欧美视频在线观看| 久久久精品久久久久| 国产午夜精品在线| 国产精品一级| 久久野战av| 久久久久久伊人| 亚洲美女91| 国产亚洲精品一区二区| 免费视频一区| 亚洲一区二区高清视频| 欧美日韩一区精品| 欧美激情导航| 欧美中文字幕在线播放| 国产日韩欧美不卡在线| 蜜臀av性久久久久蜜臀aⅴ| 一区二区在线不卡| 国产精品99免费看| 国产精品成人一区二区三区夜夜夜 | 亚洲国产成人porn| 国产精品青草久久久久福利99| 99综合视频| 亚洲精品影院在线观看| 欧美日韩视频第一区| 久久精品在线观看| 一区二区电影免费观看| 国产精品久久| 国产精品免费在线| 欧美精品高清视频| 欧美日韩一区成人| 美女精品视频一区| 欧美国产日本| 久久久青草婷婷精品综合日韩 | 国产精品mm| 久久中文字幕一区| 美国成人毛片| 久久福利视频导航| 美日韩丰满少妇在线观看| 亚洲日本欧美天堂| 国产一区二区三区四区三区四 | 亚洲人成小说网站色在线| 欧美激情久久久久久| 99综合电影在线视频| 一区二区三区在线不卡| 欧美刺激性大交免费视频| 9l国产精品久久久久麻豆| 亚洲第一精品夜夜躁人人爽 | 国产精品乱码一区二区三区| 午夜视黄欧洲亚洲| 一卡二卡3卡四卡高清精品视频| 国产一区久久| 欧美日韩精品免费观看视频| 国产欧美视频一区二区三区| 美女尤物久久精品| 一区二区三区国产盗摄| 国产免费亚洲高清| 国模一区二区三区| 亚洲国产精品www| 欧美午夜国产| 欧美精品成人一区二区在线观看| 亚洲美女视频在线免费观看| 国产亚洲一区二区在线观看| 免费不卡欧美自拍视频| 久久久免费精品| 欧美一区日本一区韩国一区| 91久久精品国产91性色| 狠狠色丁香婷婷综合| 欧美日韩亚洲一区二区三区在线观看| 国产精品一区二区在线观看网站| 久久一区二区三区国产精品| 99在线|亚洲一区二区| 亚洲高清不卡| 亚洲激情专区| 午夜免费日韩视频| 欧美风情在线观看| 欧美插天视频在线播放| 欧美高清视频| 欧美精品一区二区三区很污很色的| 欧美高清视频在线播放| 欧美中文字幕在线观看| 99这里只有精品| 久久精品视频99| 欧美日韩国产探花| 国产精品wwwwww| 亚洲国产二区| 99国产一区| 久久亚洲精品中文字幕冲田杏梨| 久久麻豆一区二区| 蜜臀a∨国产成人精品| 欧美成人免费网| 欧美日韩二区三区| 在线观看91精品国产麻豆| 国产精品一区二区三区免费观看| 国产精品三级久久久久久电影| 欧美不卡高清| 国产一区二区三区久久精品| 欧美日韩一区二区在线| 国产精品电影观看| 国产精品亚洲综合| 99re热这里只有精品免费视频| 经典三级久久| 亚洲欧美三级在线| 欧美日韩和欧美的一区二区| 欧美成人精品三级在线观看| 欧美精品色综合| 国产精品播放| 亚洲免费观看在线视频| 91久久久精品| 老色鬼精品视频在线观看播放| 欧美激情视频一区二区三区在线播放| 欧美日韩精品综合| 亚洲国产美女精品久久久久∴| 一区免费视频| 欧美一级视频精品观看| 久久一区二区三区四区五区| 久久精品欧美日韩精品| 美女黄网久久| 欧美视频在线一区二区三区| 国产一区二区三区高清在线观看| 国产日韩欧美精品在线| 亚洲高清资源综合久久精品| 尤物精品在线| 久久精品国产清高在天天线| 欧美国产日韩一区二区| 久久一区视频| 激情欧美亚洲| 一区二区欧美亚洲| 欧美久久在线| 国产精品啊v在线| 狠狠色狠狠色综合系列| 欧美视频在线一区二区三区| 欧美aaa级| 一区精品在线播放| 亚洲黄色尤物视频| 日韩亚洲欧美精品| 欧美成年人视频| 在线播放精品| 久久综合久久88| 欧美午夜久久久| 国产精品99久久久久久久女警| 一区二区亚洲欧洲国产日韩| 99国产精品视频免费观看| 亚洲精品美女在线| 欧美激情综合在线| av不卡免费看| 国产精品盗摄一区二区三区| 国产精品老女人精品视频| 在线观看一区视频| 美女久久一区| 国产嫩草影院久久久久 | 久久伊人免费视频| 国内精品久久久久久久影视蜜臀| 国产一区二区三区久久久久久久久| 亚洲国产精品成人一区二区| 亚洲黄色免费电影| 欧美韩国在线| 一本色道综合亚洲| 国产精品成人免费视频 | 国产精品久久福利| 亚洲欧洲一区二区天堂久久| 久久精品视频va| 在线精品视频一区二区三四| 亚洲日本在线观看| 欧美人成免费网站| 亚洲视频在线观看| 国产人久久人人人人爽| 精品成人免费| 欧美激情视频在线播放| 极品少妇一区二区| 欧美成人一二三| 红桃视频欧美| 欧美精品导航| 午夜精品一区二区在线观看| 欧美日韩一区高清| 亚洲日本免费|