首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同时启动进程比交错启动慢;为什么?

同时启动进程比交错启动慢;为什么?
EN

Stack Overflow用户
提问于 2010-01-11 07:58:20
回答 1查看 283关注 0票数 2

我正在评估一个在8核机器和16 on上设置的实验系统的性能。我有两个运行在内存中的Java RDBMS (hsqldb),并对其中的每一个运行TPCC客户端(派生自jTPCC/BenchmarkSQL)。

我有用来启动东西的脚本,例如hsqldb实例是用以下命令启动的:

代码语言:javascript
运行
复制
./hsqld.bash 0 &
./hsqld.bash 1 &

如果我几乎同时启动客户端:

代码语言:javascript
运行
复制
./hsql-tpcc.bash 0 &
./hsql-tpcc.bash 1 &

然后,每个客户端的初始速率都有一个峰值,大约为500-1000 tpmC (这基本上是每分钟的事务处理数),然后很快(在不到一秒内)稳定到大约200-250 tpmC的速率。OTOH,如果我在启动第二个客户端之前等待一两秒:

代码语言:javascript
运行
复制
./hsql-tpcc.bash 0 &
sleep 1
./hsql-tpcc.bash 1 &

然后,每个客户端都在2500+ tpmC上运行。等待超过一秒不会有更多的不同。

这很奇怪,因为客户端0只与服务器0通信,客户端1仅与服务器1通信。不清楚为什么会有如此戏剧性的性能干扰。

我认为这可能是由于客户端的CPU调度器亲和力,但当运行缓慢时,它们只占用单个内核的1-3% (快速运行时为20%-25%)。另一个疑点是客户端的NUMA绑定(同一个内存节点上的内存争用),但是机器显然只有一个内存节点(只有/sys/devices/system/ node /node0),而且每个客户端只占用0.8%的内存。

这似乎也不是由于hsqldb实例的CPU绑定造成的,因为只需重新启动客户端(并等待/不等待一秒钟),就可以看到快速和缓慢行为,让相同的hsqldb实例在两者之间运行(即,hsqldb不必重新启动)。hsqldb在慢时占用4-8%的CPU,快时占用80%的CPU,内存占4.3%。

为什么会发生这样的事情,还有其他的想法吗?这不涉及磁盘IO,而且我还没有耗尽系统内存。提前谢谢。其他相关信息如下:

代码语言:javascript
运行
复制
$ uname -a
Linux hammer.csail.mit.edu 2.6.27.35-170.2.94.fc10.x86_64 #1 SMP Thu Oct 1 14:41:38 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
EN

回答 1

Stack Overflow用户

发布于 2010-01-11 10:15:43

你的“两个主内存Java RDBMS(Hsqldb)”在测试前已经运行了多长时间了?如果你在测试前启动了它们,试着先把它们预热一下。让hotspot来做它的事情,把数据库中的所有if (first_time) { do_initialization(); }代码都读完,这样垃圾回收器就可以安顿下来了。

此外,同时启动两件事(无论它们是什么)意味着,在最低限度上,这两件事都试图同时完成它们的所有初始化工作(分配内存、在交换中分配页面、查找和加载库等)。因此,这两个程序都在I/O争用中度过了生命的前几毫秒。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2039178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档