国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

解決JAVA服務器性能問題

瀏覽:6日期:2024-06-30 09:41:19
內容: 解決JAVA服務器性能問題通過負載測試和分析來改善JAVA服務器應用的性能作者:Ivan Small譯者:xMatrix版權聲明:任何獲得Matrix授權的網站,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明作者:Ivan Small;xMatrix原文地址:http://www.javaworld.com/javaworld/jw-02-2005/jw-0207-server-p3.html中文地址:http://www.matrix.org.cn/resource/article/43/43998_server_capacity.html關鍵詞: server capacity摘要改善JAVA服務器的性能需要模擬負載下的服務器。創(chuàng)建一個模擬環(huán)境、搜集數據并且分析結果可能是對許多開發(fā)人員的挑戰(zhàn)。這篇文章中的示例介紹了JAVA服務器性能分析的概念和工具。作者使用這個示例來研究超額請求次數下內存使用和同步竟爭的影響。作者Ivan Small項目團隊已經很熟悉如何組織一些具體的任務并完成他們。簡單的性能問題很容易由一個開發(fā)人員分離并解決。然而大的性能問題,通常在系統處于高負載情況下發(fā)生,就不是這么簡單能處理的了。這些問題需要一個獨立的測試環(huán)境、一個模擬的負載,并且需要仔細地分析和跟蹤。在這篇文章中,我使用比較通用的工具和設備創(chuàng)建了一個測試環(huán)境。我會專注于兩個性能問題,內存和同步,他們很難用簡單的分析得到。通過一個具體的例子,我希望比較容易地解決復雜的性能問題而且可以提供處理問題過程中的細節(jié)。改善服務器的性能服務器的性能改善是依賴于數據的。沒有可靠的數據基礎而更改應用或環(huán)境會導致更差的結果。分析器提供有用的JAVA服務器應用信息,但由于從單用戶負載下的數據與多用戶負載下得到的數據是完全不同的,這導致分析器的數據并不精確。在開發(fā)階段使用分析器來優(yōu)化應用的性能是一個好的方式,但在高負載下的應用分析可以取到更好的效果。在負載下分析服務器應用的性能需要一些基本的元素: 1、可控的進行應用負載測試的環(huán)境。 2、可控的人造負載使得應用滿負荷運行。 3、來自監(jiān)視器、應用和負載測試工具自身的數據搜集。 4、性能改變的跟蹤。不要低估最后一個需求(性能跟蹤)的重要性因為如果不能跟蹤性能你就不能實際的管理項目。性能上10-20%的改善對單用戶環(huán)境來說并沒有什么不同,但對支持人員來說就不一樣了。20%的改善是非常大的,而且通過跟蹤性能的改善,你可以提供重要的反饋和持續(xù)跟蹤。雖然性能跟蹤很重要,但有時為了使后續(xù)的測試更加精確而不得不拋棄先前的測試結果。在性能測試中,改善負載測試的精確性可能需要修改模擬環(huán)境,而這些變化是必須的,通過變化前后的負載測試你可以觀察到其中的轉變。可控的環(huán)境 可控的環(huán)境最少也需要兩臺獨立的機器和第三臺控制的機器。其中一臺用來生成負載,另一臺作為控制機與前一臺建立測試應用并接受反饋,第三臺機器運行應用。此外,負載和應用機器間的網絡應該與局域網分開。控制機接受運行應用機器的反饋如操作系統、硬件使用率、應用(特別是VM)的狀態(tài)。負載模擬最精確的模擬通常用實際的用戶數據和WEB服務器端的訪問日志。如果你還沒有實際布署或者缺少實際的用戶數據,你可以通過構造類似的場景或詢問銷售和產品管理團隊或做一些有依據的猜想。協調負載測試和實際用戶體驗是一個持續(xù)的過程。在模擬中一些用戶場景是必須的。如在一個通用地址薄應用中,你應該區(qū)分更新和查詢操作。在我的測試應用中GrinderServlet類只有一個場景。單用戶連接10次訪問這個servlet(在每一次訪問間有一段暫停)。雖然這個應用很小,我認為這可以重復一些常見的東西。用戶通常不會連接給服務器請求而沒有間斷。如果沒有間斷,我們可能不能得到更精確的實際用戶上限。串行10個請求的另一個原因是實際應用中不會只有一個HTTP請求。單一而又分離的請求可以影響環(huán)境中的許多因素。對Tomcat來說,會為每一個請求創(chuàng)建一個會話,并且HTTP協議允許不同的請求重用連接。我會修改一下負載測試來避免混洧。GrinderServlet類不會執(zhí)行任何排序操作,但這個需求在大部分應用中都很普通。在這些應用中,你需要創(chuàng)建模擬的數據集并且用他們來構造相關用例的負載測試。例如,如果用例涉及到用戶登錄一個WEB應用,從可能的用戶列表中選取隨機的用戶會只使用一個用戶更精確。否則,你可能不經意地使用了系統緩存或其他的優(yōu)化或一些微妙的東西,而這會使得結果不正確。負載測試軟件負載測試軟件可以構造測試場景并且對服務進行負載測試。我會在下面的示例中使用OpenSTA測試軟件。這軟件簡單易學,結果也很容易導出,并且支持參數化腳本,還可以監(jiān)視信息的變化,他的主要缺點是基于Windows,但在這兒不是個問題。當然還有很多可選項如Apache的JMeter和Mercury的LoadRunner。The GrinderServlet列表1中顯示了GrinderServlet類,列表2中顯示了Grinder類Listing 1package pub.capart;import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;public class GrindServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Grinderv1 grinder = Grinderv1.getGrinder(); long t1 = System.currentTimeMillis(); grinder.grindCPU(13); long t2 = System.currentTimeMillis(); PrintWriter pw = res.getWriter(); pw.print('n< body> n'); pw.print('Grind Time = '+(t2-t1)); pw.print('< body> n< /html> n'); }} Listing 2package pub.capart;/*** This is a simple class designed to simulate an application consuming* CPU, memory, and contending for a synchronization lock.*/public class Grinderv1 { private static Grinderv1 singleton = new Grinderv1(); private static final String randstr = 'this is just a random string that I'm going to add up many many times'; public static Grinderv1 getGrinder() { return singleton; } public synchronized void grindCPU(int level) { StringBuffer sb = new StringBuffer(); String s = randstr; for (int i=0;i
標簽: Java
相關文章:
主站蜘蛛池模板: 免费人成综合在线视频 | 国产成人精品视频在放 | 亚洲的天堂 | 韩国美女激情视频一区二区 | 亚洲精品成人网久久久久久 | 高清免费国产在线观看 | 九九热视频在线播放 | 九九成人 | 欧美成人性色xxxxx视频大 | av毛片免费看 | 中文字幕在线观看不卡视频 | 男女朋友做爽爽爽免费视频网 | 特级毛片8级毛片免费观看 特级毛片免费观看视频 | 一级毛片免费不卡夜夜欢 | 久久ri精品高清一区二区三区 | 亚洲欧美日韩精品在线 | 欧美国产永久免费看片 | 日韩免费一级a毛片在线播放一级 | 欧美一级特黄aaaaaa在线看首页 | 中文字幕在线观看亚洲日韩 | 一本久道久久综合婷婷五 | 手机看片国产精品 | 成人夜色香网站在线观看 | 国产精品爽爽va在线观看无码 | 韩国19禁主播裸免费福利 | 久久亚洲精品无码观看不卡 | 亚洲视频 中文字幕 | 丁香婷婷影音先锋5566 | 全部免费国产潢色一级 | 高清国产美女一级毛片 | 亚洲高清中文字幕一区二区三区 | 成人免费观看永久24小时 | 亚洲国产二区三区 | 久久福利青草狠狠午夜 | 精品国产一区二区三区久久影院 | 米奇精品一区二区三区 | 午夜三级网 | 黑人一级黄色片 | 久久草在线观看 | 久久免费国产精品一区二区 | 91久久亚洲最新一本 |