我正在使用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