使用自己的工具進(jìn)行Java性能測(cè)試
性能測(cè)試是批準(zhǔn)任何軟件產(chǎn)品出廠(chǎng)之前要執(zhí)行的重要過(guò)程。您可能已經(jīng)聽(tīng)過(guò)高級(jí)同事的一些恐怖故事,這些故事是關(guān)于系統(tǒng)出廠(chǎng)時(shí)沒(méi)有任何性能測(cè)試的。因此,現(xiàn)在,這是測(cè)試的必要部分。有多種工具可用于實(shí)現(xiàn)非GUI中間件系統(tǒng)的性能測(cè)試,但是有時(shí)候我們沒(méi)有自由選擇現(xiàn)有的一組性能測(cè)試工具。
性能測(cè)試是批準(zhǔn)任何軟件產(chǎn)品出廠(chǎng)之前要執(zhí)行的重要過(guò)程。您可能已經(jīng)聽(tīng)過(guò)高級(jí)同事的一些恐怖故事,這些故事是關(guān)于系統(tǒng)出廠(chǎng)時(shí)未經(jīng)任何性能測(cè)試的。因此,現(xiàn)在,這是測(cè)試的必要部分。有多種工具可用于實(shí)現(xiàn)非GUI中間件系統(tǒng)的性能測(cè)試,但有時(shí)我們沒(méi)有自由選擇現(xiàn)有的一組性能測(cè)試工具。

性能測(cè)試是批準(zhǔn)任何軟件產(chǎn)品出廠(chǎng)之前要執(zhí)行的重要過(guò)程。您可能已經(jīng)聽(tīng)過(guò)高級(jí)同事的一些恐怖故事,這些故事是關(guān)于系統(tǒng)出廠(chǎng)時(shí)未經(jīng)任何性能測(cè)試的。因此,現(xiàn)在,這是測(cè)試的必要部分。有多種工具可用于實(shí)現(xiàn)非GUI中間件系統(tǒng)的性能測(cè)試,但有時(shí)我們沒(méi)有自由選擇現(xiàn)有的一組性能測(cè)試工具。
為什么不選擇現(xiàn)有工具?
以下是一些原因使我們無(wú)法選擇市場(chǎng)上已有的工具。
該工具中沒(méi)有合適的請(qǐng)求觸發(fā)選項(xiàng)。有些中間件系統(tǒng)具有自己的性能要求,而商用工具無(wú)法完全滿(mǎn)足它們。例如,我使用的電信服務(wù)交付平臺(tái)正在使用Sigtran協(xié)議。很難找到一種支持該協(xié)議的性能工具。典型的性能工具不支持其他一些協(xié)議,例如通用計(jì)算機(jī)協(xié)議和計(jì)算機(jī)與消息的交互。如果現(xiàn)有工具不支持我們重要的性能要求,我們可能會(huì)被迫選擇自定義性能工具。
測(cè)試工具的性能可能不足。商業(yè)工具可能具有許多功能,但是并非所有功能在任何給定時(shí)間都是有用的。由于這些額外功能,性能工具可能無(wú)法達(dá)到預(yù)期的水平。我們可能也抱有更高的期望:以較高的速率觸發(fā)請(qǐng)求,例如每秒2000個(gè)事務(wù)(TPS),并使用較低的系統(tǒng)資源(內(nèi)存,CPU,I / O)。
當(dāng)工具提供更多功能時(shí),它們可能還會(huì)使用更多系統(tǒng)資源。這些商業(yè)工具通常建議從多臺(tái)機(jī)器觸發(fā)以實(shí)現(xiàn)每秒更高的請(qǐng)求數(shù)量,但這會(huì)增加項(xiàng)目成本。如果我們更關(guān)注較高的觸發(fā)性能要求和較低的系統(tǒng)資源使用量,則可能必須構(gòu)建自己的工具才能以較高的TPS有效觸發(fā)。
該工具在商業(yè)上不可行。一些工具可能提供了足夠的選擇,但是價(jià)格可能無(wú)法幫助我們將成本控制在項(xiàng)目預(yù)算之內(nèi)。有時(shí)候,花錢(qián)買(mǎi)工具可能不值得。免費(fèi)的開(kāi)源工具可能無(wú)法提供足夠的功能。構(gòu)建我們自己的性能工具也不是免費(fèi)的。我們可能必須估算構(gòu)建自己的工具的成本,然后將使用現(xiàn)有工具的成本進(jìn)行比較以做出決定。
在我們公司中,我們使用了一些與電信相關(guān)的協(xié)議,但找不到合適的工具。我們最終自己構(gòu)建了性能工具。一旦成功,我們便開(kāi)始為大多數(shù)項(xiàng)目實(shí)施該工具。
建立自己的績(jī)效工具的優(yōu)勢(shì)
由于上述一個(gè)或多個(gè)原因,我們可能被迫編寫(xiě)自己的工具來(lái)進(jìn)行性能測(cè)試。這給了我們更多自由來(lái)決定如何設(shè)計(jì)性能工具以及包括哪些功能。以下是構(gòu)建自己的定制工具的一些優(yōu)點(diǎn)。
我們可以自由地增強(qiáng)性能測(cè)試工具的功能。如果選擇現(xiàn)有工具,那么我們將受限于該工具的功能。例如,我們可能選擇適合大多數(shù)情況的最合適的工具。但是,如果幾個(gè)月后我們收到客戶(hù)關(guān)于隨機(jī)響應(yīng)延遲的投訴,那么我們將不得不衡量這些隨機(jī)延遲。如果我們選擇的工具不支持此功能,那么我們可能必須尋找另一種方法來(lái)進(jìn)行測(cè)量。但是,如果我們擁有自己的工具,則可以更輕松地?cái)U(kuò)展工具的范圍以支持此類(lèi)新要求。
我們可以重用現(xiàn)有的監(jiān)視工具,而不是在我們的工具中建立監(jiān)視支持。操作系統(tǒng)通常會(huì)提供足夠的監(jiān)視工具來(lái)監(jiān)視系統(tǒng)的資源,例如內(nèi)存,服務(wù)器負(fù)載和CPU。此外,Java有足夠的工具,例如Flight Recorder,GC日志,Jstack和Jconsole,因此我們可以利用這些現(xiàn)有工具來(lái)補(bǔ)充我們自己的性能工具。我們可能必須構(gòu)建簡(jiǎn)單的請(qǐng)求觸發(fā)工具,并且為了進(jìn)行監(jiān)視,我們可以使用這些現(xiàn)有工具。
我們可以構(gòu)建可重用的績(jī)效工具來(lái)證明業(yè)務(wù)決策的合理性。作為一個(gè)組織,我們可能有幾種類(lèi)似的產(chǎn)品,如果我們構(gòu)建可重用的工具,它將有助于在業(yè)務(wù)級(jí)別證明我們的決定的合理性。作為技術(shù)人員,構(gòu)建工具很有趣。在注意并發(fā)問(wèn)題的同時(shí),將需要具備編寫(xiě)良好代碼的專(zhuān)業(yè)知識(shí)。如果我們可以將該工具重復(fù)用于各種項(xiàng)目,則可以幫助我們降低組織的成本。
我們可以成為使用JDK和基于操作系統(tǒng)的監(jiān)視工具的專(zhuān)家。如果我們使用JDK和基于操作系統(tǒng)的工具進(jìn)行性能監(jiān)視,則可以成為使用它們的專(zhuān)家。以后,這些經(jīng)驗(yàn)在監(jiān)視生產(chǎn)系統(tǒng)中的性能問(wèn)題時(shí)會(huì)很有用。99%的時(shí)間將不允許您使用性能軟件進(jìn)行安裝和監(jiān)視,因?yàn)檫@可能會(huì)導(dǎo)致安全問(wèn)題,并可能增加生產(chǎn)流量的開(kāi)銷(xiāo)。因此,最好具有這些基本系統(tǒng)和JDK工具的專(zhuān)業(yè)知識(shí),這些知識(shí)可以始終幫助您解決生產(chǎn)性能問(wèn)題。
構(gòu)建自己的性能工具的缺點(diǎn)
認(rèn)真分析編寫(xiě)自己的工具的需求非常重要。通常,建議將完善的工具重新用于典型的性能測(cè)試,但是也有例外。在決定編寫(xiě)自己的工具之前,強(qiáng)烈建議進(jìn)行清晰的分析。這是構(gòu)建自己的性能工具的一些缺點(diǎn)。
構(gòu)建該工具將需要大量的專(zhuān)業(yè)知識(shí)和知識(shí)。您可能需要大量的專(zhuān)業(yè)知識(shí)才能編寫(xiě)出可以滿(mǎn)足您期望的好的工具。以下幾點(diǎn)至關(guān)重要:并發(fā),有效的連接處理和有效的內(nèi)存使用。如果您的團(tuán)隊(duì)缺乏對(duì)所需技術(shù)的深入了解,則不建議自己使用工具。
建立工具可能很昂貴。如果未進(jìn)行正確的估算,則最終可能會(huì)花費(fèi)更多,而不僅僅是購(gòu)買(mǎi)現(xiàn)成的工具。建議在決定編寫(xiě)自己的工具之前進(jìn)行正確的分析和估計(jì)。
性能工具本身的性能問(wèn)題很危險(xiǎn)。這是典型的“誰(shuí)看守守望者”問(wèn)題。如果您的工具不干凈,則可能會(huì)錯(cuò)誤地懷疑已經(jīng)過(guò)性能測(cè)試的系統(tǒng)。因此,需要對(duì)您的工具進(jìn)行適當(dāng)?shù)男阅軝z查。
您準(zhǔn)備自己的表演太準(zhǔn)則升
以下是一些有關(guān)準(zhǔn)備自己的性能工具的建議指南。
明確定義性能工具的范圍。首先,我們需要選擇性能工具的范圍。范圍可以取決于這些選項(xiàng)。
請(qǐng)求觸發(fā)能力-該工具需要支持每秒不同數(shù)量的事務(wù),因?yàn)槟承┫到y(tǒng)可能以基于類(lèi)似圖形的模式或恒定模式的模式獲取請(qǐng)求流量。如果需要依賴(lài)于先前觸發(fā)的請(qǐng)求響應(yīng)的請(qǐng)求,我們可能必須緩存每個(gè)請(qǐng)求的響應(yīng)值。
運(yùn)行該工具的可用資源-根據(jù)資源限制,我們可能必須調(diào)整此性能工具才能有效地工作。需要考慮內(nèi)存和CPU使用率。
如何進(jìn)行性能監(jiān)視-我們是否將依靠該工具通過(guò)記錄系統(tǒng)使用情況詳細(xì)信息來(lái)進(jìn)行性能監(jiān)視?
選擇簡(jiǎn)單有效的技術(shù)。選擇一種更簡(jiǎn)單的技術(shù)以確保任何人都可以開(kāi)發(fā)和更改它很重要。如果我們對(duì)此觸發(fā)工具沒(méi)有太多復(fù)雜的要求,我們甚至可以使用簡(jiǎn)單的腳本語(yǔ)言。
確保該工具使用最少的系統(tǒng)資源。該工具不應(yīng)執(zhí)行任何不必要的計(jì)算或不必要的日志記錄。它應(yīng)該做最少的活動(dòng)以確保它使用更少的資源,并且可以在較低的系統(tǒng)資源使用率下以最高的速度執(zhí)行。
因此,最重要的是,根據(jù)項(xiàng)目的性質(zhì),您可以編寫(xiě)自己的性能工具,但是我只建議這種方法用于沒(méi)有合適的性能測(cè)試工具的高端中間件系統(tǒng)。

