國產基礎軟件的性能是影響軟件應用的關鍵因素,只有國產基礎軟件的應用系統在性能方面滿足了用戶的需求才能被用戶接受。應用系統與國產基礎軟件的集成理論上是可行的,但是,在高并發量、高訪問數據量情況下,基于國產基礎軟件應用系統的性能能否滿足需求尚未得到驗證。因此,需要對國產基礎軟件組合以及包含實際應用的完整系統進行性能測試。 本文以基于國產基礎軟件的醫療信息系統為例,介紹如何測試系統在承受高并發量、高訪問數據量情況下的性能,并對影響系統性能的主要因素進行分析,提出了系統的性能優化方案。實驗結果表明,該方案大幅提高了系統性能,為基于國產基礎軟件的應用系統性能優化提供了一個可借鑒的方法。 1 性能測試 1.1 性能測試方法 性能測試是通過模擬大量用戶與系統進行交互的行為,對被測系統進行加壓,獲取系統負載增加或在特定負載時,用戶的真實體驗,從而確定系統所能承受的最大負載與特定負載下的性能表現。 系統的性能測試方法較多,按照測試目的分類,可以分為負載測試、壓力測試、配置測試、并發測試、可靠性測試等。其中,負載測試是通過在被測系統上不斷增加負載壓力,獲得系統在不同負載下的性能表現。壓力測試主要測試系統資源在飽和狀態時,應用系統能夠提供的最大服務級別。本文選擇負載測試和壓力測試對系統進行了多輪的測試。 1.2 性能指標 性能指標是描述系統性能最直接的數據,提供了性能度量的標準。本文在測試中對并發用戶數、響應時間、吞吐量、資源利用率等性能指標進行監控。性能指標描述如下: (1)并發用戶數,在特定時間內,同時進行會話的用戶數。 (2)響應時間,從請求的發出到客戶端收到服務器響應所經歷的時間延遲。 (3)吞吐量,在單位時間內系統處理客戶請求的數量。 (4)資源利用率,系統各種資源的使用狀況,比如服務器的CPU、內存和網絡帶寬等。 2 性能測試實施 2.1 系統分析 醫療信息系統構建于國產基礎軟件的政務信息化領域平臺體系,采用J2EE架構,使用JSP、Strut、Hibernate等技術開發,是以國產基礎軟件為核心、低成本的公共服務系統原型和解決方案。醫療信息系統體系結構如圖1所示。 醫療信息系統主要面向各大醫院,對醫院的需求調研與系統分析如表1所示。 性能測試需要模擬大量用戶的操作行為,需要測試工具的支持來實現用戶的行為模擬、負載的生成、數據采集與分析等。本文引入測試工具LoadRunner對系統進行性能測試,測試基于國產基礎軟件的醫療信息系統的性能能否滿足表1所示的需求。 2.2 測試環境 測試時,使用1臺PC機作為負載測試機,1臺服務器作為應用服務器和數據庫服務器。PC機采用100 Mb/s局域網連接服務器。服務器軟件組成方案如表2所示。 2.3 錄制測試腳本 測試腳本是一組代碼,執行時,可以模擬用戶操作對服務器產生的請求數據,或是模擬用戶執行操作的過程、用戶等待行為等。腳本的錄制按照以下步驟執行: (1)使用LoadRunner錄制測試從業務使用頻繁程度以及負載量的大小選擇新建患者資料、患者資料查詢、新增日程功能作為三組測試。這三組測試腳本模擬的執行過程為系統登錄、業務操作和退出系統。 (2)每個操作定義為一個事務,在事務前后加入隨機的思考時間。 (3)在事務前設置集合點,保證用戶執行操作的并發。 (4)在用戶實際操作的過程中,不同用戶提交的數據、系統動態生成的會話標志是不一致的。通過參數化來設定差異值的取值范圍、迭代方式,實現數據的變量化,而系統的會話標志如session,則需要設置關聯來保存。 2.4 設計測試場景 在性能測試中,常見的錯誤觀點是只設置單一的場景。場景的設計是至關重要的,只有設計的測試場景真實地反映用戶的實際場景,性能測試的結果才可靠。 場景的設計需要考慮到系統運行時,不同操作對系統形成的負載差異,需要確定典型的應用場景下不同操作用戶的比例。醫療信息系統日常執行新建患者資料、查詢患者資料、新建日程的比例分別為25%、60%、15%。 在創建的場景中載入已錄制的三組測試腳本,并設置執行比例。編輯場景中的計劃生產器,設置虛擬用戶以一定的間隔時間按比例遞增,逐步啟動與服務器建立連接。 2.5 分析測試結果 在性能測試的過程中,LoadRunner會收集到大量的測試數據,包括每個性能指標,如事務的錯誤、警告和通知信息等。并發用戶數為200的事務響應時間如表3所示。 在測試過程中出現的問題:(1)大量用戶并發時,服務器CPU、內存的資源利用率卻很低;(2)事務執行成功率低、成功事務的平均響應時間長,很多事務因為連接超時而失敗;(3)出現內存泄露;(4)Tongweb控制臺顯示連接數據庫時出現網絡通信異常。 從測試結果可見,系統存在性能瓶頸。因此,為了使系統達到最佳的性能,需要分析測試環境對系統性能的影響,對其進行性能優化,摒除系統性能瓶頸。 3 系統優化 3.1 系統優化框架 根據Mercury公司的報告,系統的性能問題由許多因素構成。系統結構、代碼的優化程度、網絡環境、數據庫服務器、應用服務器都會對系統的性能表現造成影響。但是,影響系統優化主要因素是網絡環境、應用程序、應用服務器和數據庫服務器?紤]到這些因素之間的相互依賴關系,采用從高層到低層的優化方法。該方法的特點是先調優高層的環境,然后調優較低層的環境,符合高層實現依賴于低層實現的一般規律。優化層次如圖2所示,但如果隨意調整,容易造成循環。 (1)網絡環境優化 網絡是影響系統性能的重要因素之一,其影響主要反映在事務的響應時間與吞吐量上。在測試過程中,如果吞吐量沒有隨并發用戶增多而增大,且事務響應時間比較長時,可以考慮對網絡進行優化,改善網絡的帶寬。 (2)應用程序優化 應用程序優化針對數據訪問層,其優化措施主要有以下幾方面:(1)優化SQL語句;(2)盡量引入連接池機制,減少頻繁打開、關閉數據庫連接的操作,控制當前激活的數據庫連接總數,防止系統過載;(3)引入緩存機制,以減少磁盤I/O的次數。這些優化措施能夠提高數據讀取速率,減少訪問響應時間,降低資源的使用率。 (3)應用服務器優化 應用服務器優化集中在最大連接限制數、內存配置。在大量并發的情況下,應用服務器承受很大的負載壓力,過多地連接會很快消耗掉大量系統資源,過低的連接限制會增大連接時延,延長事務響應時間。優化時根據系統資源合理設置應用服務器最大連接限制數、內存,避免內存泄露現象出現,盡量減少響應時間。 (4)數據庫系統優化 數據庫系統優化主要是配置數據緩存區大小、最大并發會話數,為數據庫建立合理的索引。設置較大數據緩存區,可以減少數據交換次數,降低系統資源消耗。為大數據量、訪問頻繁的數據庫表建立合理的索引,能夠消除對表的順序存儲,從而提高系統的檢索性能。在CPU資源和I/O資源可用的情況下,如果服務器有很長的事務等待隊列,增大最大并發會話數,可以減少響應時間。 3.2 醫療信息系統的優化方案 本文的性能測試是在局域網中進行,因此可以排除網絡帶寬對系統性能的影響。通過分析性能測試結果,結合系統優化框架,醫療信息系統的優化措施如下: (1)應用系統的數據庫訪問層采用了數據庫持久化技術Hibernate。編輯應用程序的配置文件hibernate.cfg.xml,引入第三方的連接池c3p0,設置連接池的最大連接數為100;在Hibernate中使用二級緩存,設置Hibernate的加載特征為延遲加載。 (2)在應用服務器方面,調整Tongweb的JVM堆棧和內存的最大值、最大連接人數。編輯TongWeb4.0/bin/tongserver.sh文件,把JAVA_ARGS=”-Djmx.invoke.getters=true”修改為JAVA_ARGS=”-Xms256m-XmX750m”,調整JVM堆棧和內存的最大值為750 M,增大Tongweb的JVM虛擬堆棧和內存值后,不再出現內存泄露現象;編輯tongweb4.0/conf/tongweb.xml中socket-back-log由50調為200,調整Tongweb的減少需要等待連接數,減少響應時間。 (3)在數據庫系統方面,通過對數據表的檢查,發現數據庫表沒有建立索引,為訪問頻繁的表添加了索引。DM數據庫的參數調整如表4所示。 數據庫作出這樣的修改主要是大量并發時,由于數據量大,一般將數據緩沖區設為物理內存的80%左右(BUFFER的單位值為8 KB);數據庫的最大會話數需要大于應用程序所設置的連接池;CPU仍存在可用資源,可提高工作線程數,減少響應時間。優化后,并發用戶數為200的事務響應時間如表5所示。 通過對表3、表5結果對比可以看出,經過系統優化后,大幅提升了系統的性能。系統性能也達到了醫療信息系統的性能總體需求,確保了基于國產基礎軟件的醫療信息系統能夠滿足醫療工作及日常辦公需求。 本文介紹了基于國產基礎軟件的醫療信息系統的性能測試方法和過程,并對影響系統性能的主要因素進行了分析,提出了一個系統的性能優化方案。測試結果表明,本文提出的優化方案可以明顯改進基于國產基礎軟件的醫療信息系統的性能,能夠滿足應用的需求,可以應用于我國的醫療信息化建設中。 參考文獻 段念.軟件性能測試過程詳解與案例剖析[M].北京:清華大學出版社,2006. 郝建營,晏海華,劉超,等.一種有效的Web性能測試方法及其應用[J].計算機應用研究,2007,(1):275-277. 張忠磊,孫玉娟,李秀芳.國產軟硬件在實現電子政務集成應用上的框架研究[J].微計算機信息,2006,22(12-3):198-199. DRAHEIM D, GRUNDY J, HOSKING J. Realistic load testing of Web applications[C]. Proceedings of the Conference on Software Maintenance and Reengineering,2006. 簡玲.B/S系統性能測試的設計與實現[J].計算機工程,2009,35(10):51-53. 熊忠陽,李光勇,張玉芳,等.Web集群系統性能測試與優化[J].計算機應用研究,2008,25(3):826-832. |