在我的一些机器上创建新进程非常慢,而在其他机器上则不然.
这些机器都很相似,有些慢速机器在同一硬件和内核(2.6.32-26,Ubuntu 10.04)上运行与一些快速机器完全相同的工作负载.不涉及创建流程的任务在所有计算机上的速度相同.
例如,该程序在受影响的计算机上执行速度慢约50倍:
int main()
{
int i;
for (i=0;i<10000;i++)
{
int p = fork();
if (!p) exit(0);
waitpid(p);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
什么可能导致任务创建速度慢得多,以及我可以在机器中寻找其他差异?
Edit1:运行bash脚本(因为它们产生了很多子进程)在这些机器上运行速度也非常慢,并且对慢速脚本的分析显示了clone()内核调用的减速.
Edit2:vmstat在快速与慢速机器上没有显示任何显着差异.它们都有足够的RAM用于工作负载,而不是交换.
编辑3:我没有看到任何可疑的内容 dmesg
编辑4:我不知道为什么现在这是在stackoverflow上,我不是在问上面的示例程序(只是用它来演示问题),而是linux管理/调优,但如果人们认为它属于这里,很酷.
我熟悉为bash中的命令输入创建"临时文件",例如
cat file_1 <(echo hello) file_2
Run Code Online (Sandbox Code Playgroud)
我想更多地了解这个主题,但我不知道<( )运营商的名字.我怀疑这是一种IO重定向.
这个符号/运算符有名字吗?