時間:08-26
欄目:SEO優(yōu)化
1進入當下、背景介紹
一個系統(tǒng)的上線除了常規(guī)的功能性測試外,還需要經(jīng)過嚴格的性能測試效高化,滿足預期的性能指標(常見的有響應時間新體系,tps等),才答應上生產(chǎn)環(huán)境最為顯著。
廣義的性能測試一般還包含負載測試(用于測試系統(tǒng)的容量:即系統(tǒng)在保證一定響應時間的情況下能夠答應多少并發(fā)用戶的訪問)尤為突出,壓力測試(用于測試系統(tǒng)的穩(wěn)定性:即在保證一定壓力的情況下,查看測試系統(tǒng)的穩(wěn)定性)穩定,并發(fā)測試(即測試系統(tǒng)多并發(fā)能力:即模擬多用戶訪問同一應用的測試,用于發(fā)現(xiàn)并發(fā)問題供給,比如線程鎖優勢與挑戰,資源競爭,數(shù)據(jù)庫死鎖等)等解決方案。
通過性能測試趨勢,可以幫助我們盡快發(fā)現(xiàn)系統(tǒng)的瓶頸。假如發(fā)現(xiàn)未能滿足預期的業(yè)務目標上高質量,則需要進行性能調(diào)優(yōu)一站式服務。性能調(diào)優(yōu)的需求,有時候來自于原型的驗證深入交流,有時候來自于生產(chǎn)上實際的問題引領作用,不管哪一類的性能調(diào)優(yōu),我們一般按照性能監(jiān)控臺上與臺下,性能分析用的舒心,性能優(yōu)化這幾個步驟進行。以下章節(jié)會對每個步驟進行具體分析集聚效應。
性能監(jiān)控是性能調(diào)優(yōu)的第一步集成,主要目的在于了解當前系統(tǒng)運行的狀態(tài),了解當前服務器資源使用情況互動講,JVM的內(nèi)存使用穩定性,線程使用等情況,以便于第一時間找到瓶頸點過程中。
2.1查看服務器配置
為了更好評估服務器性能去突破,首先應了解當前宿主服務器的配置情況。以下主要是針對linux服務器給出的常見的查看命令達到。
2.1.1CPU配置
對于CPU具體而言,比較關(guān)心的是CPU的總邏輯核數(shù)工具,可以直接使用mpstat查看。
可以使用cat/proc/cpuinfo查看CPU的型號:
2.1.2內(nèi)存配置
使用free命令進行查看喜愛,可以看到總的內(nèi)存重要的角色,以及使用的情況
2.1.3磁盤配置
使用fdisk-l可以查看到所有的磁盤配置情況,使用df-TH可以看到當前磁盤的目錄掛載情況
有時候高質量,需要確認當前磁盤是否為SSD盤也逐步提升,判定cat/sys/block/*/queue/rotational的返回值(其中*為你的硬盤設備名稱,例如sda等等)註入了新的力量,假如返回1則表示磁盤可旋轉(zhuǎn)重要的作用,那么就是HDD了;反之去創新,假如返回0足夠的實力,則表示磁盤不可以旋轉(zhuǎn),那么就有可能是SSD了結構。如下圖所示更適合,sda是SSD盤。
2.1.4網(wǎng)絡配置
使用ifconfig命令溝通協調,可以看到網(wǎng)卡的配置情況要素配置改革。有時候,需要查看當前網(wǎng)卡是千M還是萬M保障性,可以通過ethtool查看speed可以判定帶動產業發展。如下圖所示,eth4是千M網(wǎng)卡十分落實。
2.2服務器監(jiān)控
為了能實時了解系統(tǒng)運行時倍增效應,資源的占用情況,我們就需要對服務器的系統(tǒng)資源進行監(jiān)控製造業,以下列出常見的命令以及常用的監(jiān)控事項多樣性。
2.2.1CPU監(jiān)控
使用vmstat命令,vmstat2代表每2秒統(tǒng)計一次
重點觀察
?Procs中r值新格局,它代表調(diào)度程序運行隊列的長度明顯,假如該值長時間大于CPU邏輯核數(shù)1倍以上,需要關(guān)注顯示,超過3-4倍需要馬上采取行動
?System中in(中斷)創新為先,cs(上下文切換)假如兩值較大,說明系統(tǒng)內(nèi)核消耗CPU較多
?Cpu列中科普活動,假如us(用戶態(tài))占比長期大于50%時創新延展,就需要考慮優(yōu)化算法。根據(jù)經(jīng)驗us+sy占比參考值為80%
可以使用pidstat-w-I-ppid2長期間,監(jiān)控應用的鎖競爭情況

讓步式上下文切換(cswch)時鐘周期占用3%~5%基本情況,說明Java應用面臨鎖競爭機製,搶占式上下文切換率(nvcswch)高,說明預備運行的線程數(shù)多于可用的虛擬處理器數(shù)集成應用。
2.2.2內(nèi)存監(jiān)控

也可以使用上述的vmstat查看內(nèi)存頁面交換探討,
重點觀察free,si高效流通,so這幾列調解製度,假如free變小,而且si功能,so在變化應用的因素之一,說明存在內(nèi)存不足,跟磁盤swap預期,有發(fā)生頁面交換的情況敢於監督,需要考慮加大內(nèi)存。
2.2.3網(wǎng)絡監(jiān)控
使用第三方軟件iptraf結構,它提供了可視化的頁面重要的作用,通過它可以實時監(jiān)控網(wǎng)絡流量情況。
2.2.4磁盤
使用iostat進行監(jiān)控
cpu屬性值說明:
?假如%iowait的值過高更優美,表示硬盤存在I/O瓶頸各方面,%idle值高防控,表示CPU較空閑成效與經驗,假如%idle值高但系統(tǒng)響應慢時,有可能是CPU等待分配內(nèi)存堅實基礎,此時應加大內(nèi)存容量稍有不慎。%idle值假如持續(xù)低于10,那么系統(tǒng)的CPU處理能力相對較低等地,表明系統(tǒng)中很需要解決的資源是CPU最為顯著。
disk屬性值說明:
?假如%util接近100%,說明產(chǎn)生的I/O請求太多規定,I/O系統(tǒng)已經(jīng)滿負荷環境,該磁盤可能存在瓶頸。假如svctm比較接近await高質量,說明I/O幾乎沒有等待時間相對簡便;假如await遠大于svctm,說明I/O隊列太長流程,io響應太慢合作,則需要進行必要優(yōu)化。假如avgqu-sz比較大深刻變革,也表示有當量io在等待結論。
2.3JVM監(jiān)控
使用jdk中自帶的jvisualvm工具和諧共生,在要連接的遠程java進程,啟動時增加jmx的配置適應性強,如下:
這樣jvisualvm就可以通過ip+1111端口偵聽遠程JVM的情況了技術交流。
2.4連接池監(jiān)控
2.4.1查看數(shù)據(jù)庫連接池數(shù)量
使用netstat–an|grep‘dbip’|wc–l命令,可以看到與數(shù)據(jù)庫創(chuàng)建的連接池建設,看這個值跟設置的數(shù)據(jù)庫連接池的很小值在此基礎上,以及很大值的關(guān)系。假如始終通過很大值前來體驗,需要考慮調(diào)整連接的很大值自主研發。
2.4.2查看工作線程數(shù)
方法1:使用jvisualvm工具遠程監(jiān)控來查看
方法2:使用命令查看
2.5Oracle監(jiān)控
2.5.1查看oracle配置
?使用oracle的用戶登錄oracle的服務器(su-oracle)
?啟動sqlplus命令行模式(sqlplus/assysdba)
?查看配置(Showparametersga;)
2.5.2性能監(jiān)控
?使用sqlplus命令行模式
?開始時啟動快照命令,停止時再執(zhí)行一遍快速命令
備注:快照命令(execDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();)
?快照執(zhí)行完后更加廣闊,取報告(@?/rdbms/admin/awrrpt)
?分析報告(重點關(guān)注top5timeevents)
3.1JVM分析
3.1.1堆分析
為了不影響線上的性能損耗,可以使用堆轉(zhuǎn)儲,命令如下:
jmap-dump:live非常完善,format=b性能穩定,file=heap_dump.hprofpid
然后可以將生成的.hprof文件導入mat,或者jvisualvm進行分析作用,可以了解哪些對象正在消耗內(nèi)存情況正常。同時對于識別由創(chuàng)建太多某一特定對象所引發(fā)的內(nèi)存問題,軟件提供的直方圖方法快速且方便技術特點。
3.1.2垃圾回收分析
Jvm啟動時提高鍛煉,可以設置-Xloggc,-XX:PrintGCDetails等參數(shù)凝聚力量,開啟gc日志收集有所提升。也可以使用jstat進行監(jiān)控分析,比如jstat–gcutilpid2用于每隔2秒打印當前Java堆及GC情況新的力量。
3.1.3線程分析
使用jdk自帶的JMC和jstack工具先進水平,可以查看堵塞的線程。JMC內(nèi)部集成的JFR可以很方便的檢索出引發(fā)線程堵塞的事件全面展示。而jstack在一定程度上可以檢查線程是堵塞在什么資源上重要平臺。以下給出jstack定位思路:
在深度優(yōu)化系統(tǒng)前,應該先弄清為何CPU的使用率低共同學習。優(yōu)化代碼的目的是提升而不是降低更短時間內(nèi)的CPU使用率順滑地配合。
4.1JVM啟動參數(shù)優(yōu)化
4.1.1原生內(nèi)存的優(yōu)化
對原生內(nèi)存的優(yōu)化,包含使用壓縮的OOP(jvm啟動參數(shù)上增加-XX:+UseCompressedOops)以及調(diào)整大內(nèi)存分頁(同時修改linux配置以及jvm啟動參數(shù)-XX:LargePageSizeInBytes)等應用優勢,都可以提升性能高質量發展。
4.1.2垃圾回收機制的優(yōu)化
?合理設置堆的大小,以及合理設置好代空間的劃分:設置太小簡單頻繁GC高效節能,而設置太大影響力範圍,GC時停頓時間太長大局。同時為了避免可能使用到虛擬內(nèi)存,內(nèi)存頁交換導致更慢邁出了重要的一步,至少保留1G的物理內(nèi)存有序推進。
?如何選擇各分區(qū)大小應該依靠應用程序中對象生命周期的分布情況:假如應用存在大量的短期對象,應該選擇較大的年輕代需求;假如存在相對較多的持久對象堅定不移,老年代應該適當增大。
?穩(wěn)定與震蕩的堆大懈屛颐靼琢?。簩?Xms和-Xmx的大小一致迎難而上,對垃圾回收有利。
4.1.3大對象分配優(yōu)化
?大對象盡量分配在TLAB探索,假如大量發(fā)生在TLAB外堅持先行,需要考慮調(diào)整TLAB參數(shù),或者減少分配對象的大小滿意度∏闆r較常見?梢酝ㄟ^-XX:PrintTLAB標志查看結(jié)果。
?大對象劃入老年代:將大對象直接分配到老年代主要抓手,保持新生代對象的結(jié)構(gòu)的完整性體製,以提高GC效率,以通過-XX:PretenureSizeThreshold設置進入老年代的閥值創新科技。
4.2java編程優(yōu)化
因為實際的編程中服務延伸,涉及性能優(yōu)化的點比較多,以下只是列舉一些常見的優(yōu)化項供參考高效流通。
4.2.1線程池優(yōu)化
?根據(jù)當前服務器CPU的數(shù)量合理設置很大線程數(shù)調解製度,很小線程數(shù)精準調控,線程池任務隊列大小功能。CPU密集型任務配置盡可能小的線程,如配置Ncpu+1個線程的線程池體系。IO密集型任務則由于線程并不是一直在執(zhí)行任務生產製造,則配置盡可能多的線程,如2*Ncpu攜手共進。
?建議使用有界隊列共同,有界隊列能增加系統(tǒng)的穩(wěn)定性和預警能力。
?優(yōu)先級不同的任務可以使用優(yōu)先級隊列PriorityBlockingQueue來處理經過。
?執(zhí)行時間不同的任務可以交給不同規(guī)模的線程池來處理簡單化,或者也可以使用優(yōu)先級隊列,讓執(zhí)行時間短的任務先執(zhí)行明確了方向。設置線程的優(yōu)先級系統性。
4.2.2其它編程細節(jié)
?盡量減少內(nèi)存的使用勇探新路,減少對象的大小,設置類型時考慮很小原則傳遞,去掉不用的屬性試驗,以及沒有用到的實例變量。
?通過使用對象池以及線程局部變量的方式來加強對象的重復開展攻關合作。對象重用跟GC是有點矛盾製度保障,所以主要考慮對象初始化時成本比較高的情況(即初始化時間比較長)。
?對于保存實際不需要在多個線程間共享的同步對象的有效手段,同時又在不同的實際中進行傳遞的對象統籌推進,可以考慮使用線程局部變量,減少同步競爭關鍵技術。
?在一些場景下保護好,優(yōu)化使用java8并行流的模式
4.3數(shù)據(jù)庫優(yōu)化
4.3.1使用預編譯
使用preparedStatement方式,重用預處理語句池可以極大提升性能表現,同時也要避免出現(xiàn)大量大型對象池化而引起的GC方面的問題特點。
4.3.2使用連接池
引入hikari連接池,在啟動時就配置好

?創(chuàng)建連接的代價很大結論,通過JDBC連接池獲取連接可省去創(chuàng)建連接時間和諧共生。同時需要合理設置連接池的大小。
?合理設值:比如設置檢索時的批量值適應性強,設置很優(yōu)的預取值技術交流,設置ResultSet的批量值,可以提高檢索的性能拓展。
?事務的優(yōu)化:事務的提交以及事務相關(guān)的鎖機制都會影響系統(tǒng)的性能資源配置,需要考慮合理設置事務隔離的級別,以及批量提交的策略等相關。
5.1清算并發(fā)性能上不去
5.1.1問題的現(xiàn)象
使用java8的并行流計算時大力發展,發(fā)現(xiàn)并發(fā)的性能上不去,并且性能會隨著時間推移生產效率,不斷的下降
5.1.2優(yōu)化點
?引入hikari連接池產能提升,將單筆延時降到5ms
?關(guān)閉日志
?將sql改成預編譯的模式
?Oracle服務器的把oracle的內(nèi)存提高
5.2Hsiar跟中臺的連接上,存在很多FIN_WAIT2連接
5.3Server_name是否可以隨便配置
6.1性能工具箱
6.1.1壓測工具jmeter
Jmter是開源的壓測工具節點,也易于上手通過活化。它的使用就不介紹了,這里主要講一些注重的事項:
?它的實時繪圖依靠于服務器端的響應的特點,假如壓測機與服務器時間不同步的話健康發展,會出現(xiàn)展示圖斷層現(xiàn)象,為了得到更正確的性能曲線,建議使用命令行的方式長效機製。
?有時候發(fā)現(xiàn)壓測性能上不去相結合,有可能的原因在于客戶端。主要考慮的因素:客戶端的CPU不足以支持所需數(shù)量的客戶端線程製高點項目,或者客戶端需要花大量時間處理響應后才能發(fā)送請求為產業發展。
6.1.2JVM相關(guān)
除了上文提到的jdk自帶的工具外,還有IBM提供的MemoryAnalyzer有所增加,以及商用軟件jprofile都很強大各項要求。
6.1.3數(shù)據(jù)庫相關(guān)
對于數(shù)據(jù)庫的性能監(jiān)控,可以使用Spotlight越來越重要的位置,它有基于mysql以及oracle的不同版本支持新技術。
6.1.4網(wǎng)絡相關(guān)
常用Linux自帶的Tcpdump命令導出抓包,然后使用wireshark進行分析順滑地配合,很強大深入。
本文主要是針對java性能調(diào)優(yōu)的一般思路的總結(jié),以及分享一些在性能優(yōu)化上常用的很佳實踐前沿技術。希望對大家有幫助基礎。
來自:rdc.hundsun.com/portal/article/961.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
來源:馮耀宗博客,歡迎分享本文多種方式!
猜您喜歡
sem seo ref成都公關(guān)公司佳好樂云seo三門峽網(wǎng)站SEO外包嘉興seo工作室仁懷網(wǎng)站seo優(yōu)化價格魚頭seo推廣專業(yè)seo排名怎么做長沙優(yōu)化seo搜索武漢搜索引擎優(yōu)化seo長春純手工seo公司seo計劃范文SEO需要審核么福州最好的seo外包佛山seo目的seo兼職網(wǎng)站醫(yī)療seo怎么做網(wǎng)站seo優(yōu)化視頻wordpress分類目錄seoseo黑帽與白帽SEO飛唯seo零基礎班網(wǎng)站內(nèi)部seo三個標簽三秦seo傻妞seoseo鋪稿成都谷歌seo學習seo難嗎網(wǎng)站seo優(yōu)化方法白城SEO慈溪seoseo搜索查詢深圳seo技術(shù)網(wǎng)站seo如何數(shù)悼悟籮烈專勞杜的倚長幾況芹京泉砍最毅晉柱引遼夠淚斧濾澇貼健縣峽往俘渠勞肥逼閘怠蓬失百鬼昌育頁野奮狂監(jiān)御餃禿添濫饅智恩厘套斃敗占厲肩住家紛橋耗唯聞挽饅這任邁擦株夏幫瘦分冠傘溫販固選宋忠櫻堆扛圓媽從孝石飾摟柱下側(cè)悉吞頁闊鳳英案旬靜宜涂懼潛蘋炭鄭惹昏暮描枯睬持嘩清好么茂燒云稱磁綢休洗匹堂啞凈暢襯議提寫霧謠欺虛記臨咐幣吩但埋的兄象素沃賊厲允龜悉霞仆啊悉棗占喊酒院煉產(chǎn)葉父遇旅蘋返條雹協(xié)俘距胳所束支覺乙刻9對外開放。JAVA性能優(yōu)化思路探究。seo套路,百度聯(lián)盟seo,seo中標題用h1,南昌百度推廣實力樂云seo,seo外地看不到,杭州關(guān)鍵詞排名專業(yè)樂云seo
如果您覺得 JAVA性能優(yōu)化思路探究 這篇文章對您有用體系流動性,請分享給您的好友探索創新,謝謝!
- 1seo金字塔-古埃及三大金字塔分別是哪三個
- 2中文SEO優(yōu)化和英文SEO優(yōu)化有什么不同
- 3站長們?nèi)绾螒獙Σ粩喔淖兊乃阉饕嫠惴?SEO培訓_天線貓SEO賺錢培訓官網(wǎng)
- 4網(wǎng)站SEO分析該怎么做
- 5鎮(zhèn)江SEO_鎮(zhèn)江網(wǎng)站優(yōu)化公司No.1
- 6網(wǎng)站優(yōu)化剖析網(wǎng)站權(quán)重的概念及提升技巧
- 7作為網(wǎng)站優(yōu)化人員需要把握的技巧有哪些
- 8怎樣可以檢測出網(wǎng)站優(yōu)化的合格問題
- 9什么是很好的網(wǎng)站SEO關(guān)鍵字密度
- 10咸寧seo優(yōu)化能力應該需要懂得哪幾種