您的位置:新聞資訊 - 閱讀新聞

  新聞資訊 > 技術文庫

淺談AIX環境下的Java性能調優
發布時間:2013-12-16  發布者:
】 【】 【

本文介紹了什麼是Java,AIX下的Java版本,Java的性能準則,AIX提供的監視Java的工具,以及如何在AIX用戶環境下進行Java應用程序性能調優。
1、什麼是Java
Java 是壹種面向對象的編程語言。它以 C++ 為模型,被設計成小的、簡單的、在源和二進制級別跨平臺的可移植的語言,Java 程序(applets 和應用程序)可以運行於任何已經安裝了 Java 虛擬機(JVM)的機器上。Java 相對其它計算機語言有顯著的優勢,適合於任何編程任務,Java 有以下優勢:
Java 是獨立於平臺的:Java 最顯著的壹個優勢就是它輕易從壹臺計算機系統移動到另壹臺的能力。對於任何Web軟件至關重要的就是在許多不同系統上運行同壹個程序的能力, Java 成功之處在於在源和二進制級別能夠獨立於平臺。
Java 是面向對象的:Java 的另外壹個優點在於利用面向對象的方法。這允許妳創建模塊化程序和可重用代碼。
Java 容易學習:Java 被設計成容易使用的語言,因此它更易於寫、編譯、調試以及學習。
Java 是電子商務的解決方案: 由於 Java 的健壯性、使用方便、跨平臺的能力和安全性特點,它已成為了提供世界範圍內因特網解決方案的選擇語言。
2、AIX環境下的Java版本
目前,AIX操作系統可以支持多個Java版本,可以在壹個操作系統下同時安裝多個Java版本,應用需要哪個版本時,可設置PATH路徑到此版本所在的目錄。以下是AIX可支持的Java版本信息:
Java 1.1.8
Java 1.2.2
Java 1.3.0
Java 1.3.1 32bit
Java 1.3.1 64bit
Java 1.4 32bit
Java 1.4 64bit
從性能來看,盡量使用高版本的AIX和高版本的Java,並且安裝最新的操作系統和Java補丁包。當需要超過2GB的Java 堆時,需要使用64bit的Java。在AIX環境下,Java是免費使用的,可以從下列網址下載Java軟件:
http://www6.software.ibm.com/dl/dka/dka-p
從下列網址下載AIX操作系統和Java的補丁包:
http://techsupport.services.ibm.com/server/fixes.
3、Java 性能準則
在編寫Java應用程序時,以下是基本的準則:
使用字符串緩沖區而不是字符串連接,當進行連續字符串操作時要避免不必要地創建那些最終必須經過垃圾回收的對象。
避免連續寫入 Java 控制臺以減少字符串操作、文本格式化以及輸出的花費。
必要時通過使用變量的原語類型來避免對象創建和操作的花費。
經常高速緩存用過的對象以減少必須的垃圾回收數量,並且避免重復創建對象的需求。
盡可能分組本地操作以減少 Java 本地接口(JNI)的調用。
只有在必要時再使用同步方法,以此限制在 JVM 和操作系統中的多任務。
除非必要避免調用垃圾回收器。如果您必須調用它,只有在空閑時間或壹些非關鍵階段再這樣做。
可能時使用整型而不是長整型,因為 32 位操作快於 64 位。
可能時申明方法為 final。JVM 處理 final 的方法較好。
當創建常量時為了減少變量需要初始化的次數,使用關鍵字 static final。
避免不必要的“casts”和“instanceof”引用,因為在 Java 中銷毀操作不是在編譯時而是在運行時執行的。
當數組可以滿足要求時盡可能避免使用向量。
從向量末端添加和刪除項以得到較高性能。
使用 -O 選項編譯 Java 文件。
避免在循環中分配對象。
使用緩沖區 I/O 並調優緩沖區大小。
使用連接池和準備緩存聲明進行數據庫訪問。
使用連接池連接到數據庫並重用連接而不是重復打開和關閉連接。
最大化線程生存期並最小化線程創建和銷毀循環。
最小化共享資源的爭用。
最小化短生存期對象的創建。
避免遠程方法調用。
使用回調以避免阻塞遠程方法調用。
避免創建只用來訪問壹個方法的對象。
盡可能保持同步方法處於循環外。
在數據庫中以 Unicode 形式存儲字符串和字符數據。
記錄 CLASSPATH 以便最常用的庫先出現。
4、監視 Java
在AIX 操作系統中有許多工具可以用來監視Java應用程序的性能,以下是簡單的概述。
vmstat
這條命令提供了各種系統資源的信息。它報告了運行隊列以及等待隊列中內核線程的統計信息、內存使用、頁面調度空間、磁盤 I/O、中斷、系統調用、上下文切換以及 CPU 活動。
iostat
這條命令報告了詳細的磁盤 I/O 信息。
topas
這條命令報告了 CPU、網絡、磁盤 I/O、工作負載管理器和進程活動。
tprof -k -s -e -x "sleep 10"
這條命令可被用來剖析應用程序以查明任何可能影響性能的活動程序/方法。
ps -mo 線程
這條命令顯示了壹個進程或線程綁定於哪壹個 CPU。
java -verbose:gc
這個選項可被用來檢查垃圾回收對您的應用程序的沖擊。它報告了垃圾回收所花的總共時間,平均每壹次垃圾回收花費時間,平均每壹次垃圾回收收集的內存以及平均每壹次垃圾回收中的對象數。
5、Java應用程序性能調優
建議在運行Java應用的AIX用戶環境下,設置以下環境變量。
AIXTHREAD_SCOPE=S
用 AIX 4.3.1 啟動,此變量缺省值為 P。這表示進程寬度爭用作用域(M:N)。對於 Java 應用程序,您應該設置這個值為 S,它表示系統寬度爭用作用域(1:1)。
AIXTHREAD_MUTEX_DEBUG=OFF
用調試器為使用目的維持壹個活動人工幹預列表。
AIXTHERAD_COND_DEBUG=OFF
用調試器為使用目的維持壹個條件變量列表。
AIXTHREAD_RWLOCK_DEBUG=OFF
pthreads 庫用調試器為使用目的維護壹個包含活動互斥鎖定、條件變量以及讀/寫鎖定的列表。當壹個鎖定初始化,如果列表中沒有這壹鎖定,它被加入到列表中。此列表以鏈表形式實現,因此當列表變大時通過搜索它來確定壹個鎖定是否存在就包含了性能問題。問題是此列表被鎖定保護,這壹鎖定在搜索操作過程中壹直保持。當搜索進行時其它對 pthread_mutex_init() 調用的子例程必須等待。為了優化性能,您應當將此線程調試選項設置為 OFF。它們的缺省值為 ON 。
SPINLOOPTIME=500
spinloop 時間是壹個進程在阻塞前在壹個繁忙的鎖定上可以循環的次數。這個值缺省設置為 40。如果 tprof 輸出表明 check_lock 例程具有高的 CPU 使用率,並且如果通常鎖定在短時間內可用,您應當通過將值設置為 500 或更高來提高循環時間。
同樣,運行Java應用的AIX用戶環境下,推薦以下設置:
l ulimit -d 不限制
l ulimit -m 不限制
l ulimit -n 不限制
l ulimit -s 不限制
操作系統內壹定的環境參數和設置可以用來調優 Java 性能。同樣,許多調優系統部件如 CPU、內存、網絡、I/O 等等的技術,可以提高 Java 性能。
為了使得 Java 的性能和可伸縮性盡可能的好,您應當使用最新可用版本的操作系統和 Java,以及Just-In-Time(JIT)編譯器。
與 Java 相關的最普通的性能問題與垃圾回收機制有關。如果 Java 堆太大,則堆將必須駐留在主內存外。這將導致頁面調度活動增加,它將影響 Java 性能。同樣,壹個大的堆可能花很多秒去填充。這意味著,盡管垃圾回收活動不頻繁,但與垃圾回收相聯系的暫停次數將增加。為了調優 Java 虛擬機(JVM)的堆,使用 java 命令加選項 -ms 或 -mx。使用垃圾回收統計信息來幫助決定最佳設置。