有几个问题请教:
1. 如何效率地评估java程序的内存消耗和运行时间?
前几天问了java code在不同机器上内存消耗不同的问题。现在测试了不同的Xms Xmx参
数,同样的机器使用16core,16个进程时大致如下.基本上Xms=1/2g,Xmx=6g时内存消耗
最少,也显著比其他参数要快。没有再往下测了。但是这样测试觉得好没效率,有没有
什么自动半自动的方法可以做这个评估的?特别是很多语言benchmark的测试,他们是
怎么评估像java这样语言的速度和内存使用的?
Xms Xmx
16g 112g: cput=11:50:14,mem=30666936kb,vmem=125003524kb,walltime=00:48
:24
16g 48g: cput=11:50:32,mem=28415984kb,vmem=55443888kb,walltime=00:48:
22
16g 40g: cput=11:47:43,mem=25669572kb,vmem=46747780kb,walltime=00:48:
13
16g 32g: cput=11:49:53,mem=22904308kb,vmem=38052696kb,walltime=00:48:23
24g 24g: cput=11:55:54,mem=25863512kb,vmem=29357612kb,walltime=00:48:
37
16g 24g: cput=11:50:52,mem=20067280kb,vmem=29357612kb,walltime=00:48:
09
16g 16g: cput=11:55:02,mem=17261712kb,vmem=20663064kb,walltime=00:48:50
12g 12g: cput=11:56:16,mem=12966704kb,vmem=16314988kb,walltime=00:48:55
6g 12g: cput=11:47:45,mem=8621560kb,vmem=16314988kb,walltime=00:48:36
8g 8g: cput=11:55:50,mem=8670664kb,vmem=11967980kb,walltime=00:48:49
4g 8g: cput=11:50:20,mem=5776760kb,vmem=11967448kb,walltime=00:48:29
2g 8g: cput=11:48:40,mem=4331176kb,vmem=11967448kb,walltime=00:48:41
6g 6g: cput=11:55:44,mem=6518500kb,vmem=9793676kb,walltime=00:48:59
2g 6g: cput=11:26:22,mem=3628316kb,vmem=9793676kb,walltime=00:47:49
1g 6g: cput=11:25:40,mem=3005524kb,vmem=9793676kb,walltime=00:47:48
2.另外我在同样的参数和硬件下测试了线程数>core数的效果,还是有进步的,这是不
是intel超线程的功效?每个线程本身是可以占满一个core的
6g 12g (16cores,32 threads): cput=11:30:03,mem=8625976kb,vmem=
17380012kb,walltime=00:46:10
6g 12g (16cores,16 threads): cput=11:47:45,mem=8621560kb,vmem=
16314988kb,walltime=00:48:36
3.内存使用似乎还是跟硬件有关?code的behavior是完全一样的,内存使用也应该完全
一样吧?
xms=1g,xmx=6g,12core,12threads的情况下:
在E5上:
cput=10:10:59,mem=2902424kb,vmem=9527420kb,walltime=00:56:01
在X5上:
cput=10:47:46,mem=2945292kb,vmem=9319108kb,walltime=00:58:58