2013-05-14 29 views
2

我在我的Windows機器上安裝了Scala IDE。當我在同一臺機器上運行我的測試程序時,我得到了一些性能數據。在windows上編譯的Linux上的akka​​性能

爲了運行Linux機器,它是一個8芯32 GB機在相同的程序中,我通過FTP生成的類文件和Scala +阿卡罐子到Linux機器。

Linux機器使用服務器版Java,而Windows機器使用的是客戶機版Java。

當我在Linux機器上運行相同的程序,所有路徑設置正確時,我得到的性能比windows機器差。

這是爲什麼?該程序能夠運行良好,但在較高端機器和服務器版上表現不佳。

是由於編譯和運行環境的差異嗎?我能做些什麼來調查這種行爲的原因。

編輯:編譯完成32位的windows env,而linux機器上的java是64位服務器。這對性能有什麼影響嗎?

+0

謝謝。但我的主要疑問是,如果我錯過了要放在Linux機器上的東西。例如一個jar/lib等,因爲我沒有一個適當的Linux上的Scala設置框,我直接用命令行機智調用類文件在類路徑中適當的罐子(如在我的斯卡拉IDE eclipse env) – weima 2013-05-14 09:53:56

+0

簡單地說,這應該至少給與我的Windows機器相同的性能,不是嗎? – weima 2013-05-14 09:54:49

+0

是的,通過sbt運行它很重要嗎?它已經與適當的類路徑運行,並且我已經給-Xms2048m -Xmx2048M -X:+ UseParNewGC -server -XX:+ UseConcMarkSweepGC -XX:+ CMSIncrementalMode選項也 – weima 2013-05-14 10:09:40

回答

0

如果您張貼在兩臺機器上了Java的配置,即JVM版本,並傳遞給java命令在兩個環境中的所有標誌這將是有益的。

此外,你如何衡量表現,你會得到什麼樣的價值?是否還有其他問題,比如I/O,網絡流量等?如果不是,您的程序中正在使用哪些算法?它是一個計算並終止的程序,還是運行到關閉的服務器程序?

你應該把特別注重內存配置(如@ alex23建議)和-server標誌。另外,請確保您的Linux環境正在使用與Windows環境相同的製造商提供的JVM。 Windows通常與Sun JVM一起提供,而一些Linux可能仍具有舊的Oracle JVM。在命令行上嘗試java -version

此外,不是比較複雜程序的結果,而是首先嚐試更簡單的程序。嘗試確定啓動JVM的開銷,而不是Java/Scala代碼的有效運行時間。

基於Windows的版本在Linux機器上導致性能問題的想法聽起來極不可能。您可以通過在Linux機器上編譯軟件然後運行它來輕鬆檢查。

+0

嗨,Windows的Java版本:1.6.0_29 Linux的Java版本:1.6.0_12這有什麼區別?使用的選項:-Xms2048m -Xmx2048M -XX:+ UseParNewGC -server -XX:+ UseConcMarkSweepGC -XX:+ CMSIncrementalMode – weima 2013-05-22 14:00:38

+0

版本看起來不錯;他們不應該有所作爲。也許你可以嘗試一些其他的建議。找出爲什麼一臺機器很慢並不容易,尤其是那些細節。 – Madoc 2013-05-23 18:05:47