我正在使用MapReduce框架在Google App Engine上做一些實驗(在這種情況下,是一個MD5暴力破解工具)。Google App Engine中的代碼運行速度極其緩慢
我在這裏的代碼運行得非常慢內GAE的問題,甚至只是使用開發服務器
此代碼https://github.com/jordan-thoms/Hash/blob/f982956f41313cd4fe3b5105aee21ea11bd3af16/src/nz/net/thoms/hash/mapreduce/HashMapper.java將每秒只能處理大約4000哈希(這是的時間內一個調用地圖(),並沒有谷歌應用程序引擎apis在裏面使用)。
我把代碼之外並運行它獨立 - https://github.com/jordan-thoms/Hash/blob/f982956f41313cd4fe3b5105aee21ea11bd3af16/src/nz/net/thoms/hash/StandaloneTest.java,並且該版本將做超過100萬每秒。這是中央循環運行速度較慢,這很奇怪,因爲沒有任何代碼與谷歌應用程序引擎有任何關係。
我試着運行在谷歌應用程序引擎代碼分析器,但我還沒有發現任何有用的東西 - 好像是一噸()調用checkRestricted之類的東西的,雖然。我試圖消除安全管理
即使這樣簡單的代碼:
int i;
for (i=0; i< 1000000; i++) {
i += 2;
i += (int) Math.sin(i * (i + (int) System.currentTimeMillis()));
}
long enda = System.currentTimeMillis();
System.out.println("took " + (enda - starta) + " i:" + i);
奔跑在117毫秒,如果我把它放在一個正常的程序,並在超過400毫秒的開發模式一個servlet內,在同一處理器。
(有趣的是,映射得到約60000哈希每秒完成對生產谷歌應用程序引擎,所以速度快了很多,但仍然比一個獨立的程序很慢)
我不知道,但在檢查其他任何事情之前,GAE使用什麼JIT(和相關選項),以及您的獨立代碼使用什麼?我問的不是因爲我可以對答案做任何有用的事情,而是因爲如果你知道這可能會幫助你:-)另外,生產GAE和你的獨立之間15倍差距的部分(可能不是全部)可能就是你的機器比它們給每個應用程序的有效CPU速度更快。至於開發服務器,Google的原始速度可能沒有優先級! – 2012-04-28 02:13:48
謝謝 - 我使用visualvm來查看每個進程,並且我看不到GAE服務器的任何自定義jit選項,它們都使用Hotspot 20.6-b01。還有什麼地方我應該看看? – Jords 2012-04-28 02:26:12
我的意思是生產GAE選項 - 你會認爲它們使用了很好的優化,但是我知道你使用的更好。我不知道他們是否在哪裏記錄他們使用什麼,但如果你沒有做任何特別的事情,那麼我不會馬上預計他們會慢多倍。我不會試圖解開開發性能,就像我說我懷疑它是一個優先事項,所以如果他們擠滿了充滿儀器的開發服務器代碼,那麼您可能無法做到這一點。 – 2012-04-28 02:32:09