如何知道运行多少个进程最有效率?



 grep 'physical id' /proc/cpuinfo | sort -u | wc -l
grep 'core id' /proc/cpuinfo | sort -u | wc -l
grep 'processor' /proc/cpuinfo | sort -u | wc -l

output


 2
10
40

更多信息


 cat /proc/cupinfo

shows


 processor    : 0
vendor_id    : GenuineIntel
cpu family    : 6
model        : 62
model name    : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
stepping    : 4
microcode    : 0x416
cpu MHz        : 2499.892
cache size    : 25600 KB
physical id    : 0
siblings    : 20
core id        : 0
cpu cores    : 10
apicid        : 0
initial apicid    : 0
fpu        : yes
fpu_exception    : yes
cpuid level    : 13

...

processor    : 39
vendor_id    : GenuineIntel
cpu family    : 6
model        : 62
model name    : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
stepping    : 4
microcode    : 0x416
cpu MHz        : 2499.892
cache size    : 25600 KB
physical id    : 1
siblings    : 20
core id        : 12
cpu cores    : 10
apicid        : 57
initial apicid    : 57
fpu        : yes
fpu_exception    : yes
cpuid level    : 13

Linux cpu parallel-execution 并行

fourone 9 years, 6 months ago

这个要看所运行的进程是什么性质的。

  1. 如果是CPU密集型的,比如计算圆周率,有多少processer就分配多少就行了

  2. 如果是IO密集型,比如大多数的web应用,还每个processer只分配一个进程就太浪费了,一般可以根据具体情况而定,可以分配2~10个

免贵姓喵名霸天 answered 9 years, 6 months ago

一般来讲和机器的核数相同算是效率较高的吧,具体还要看程序场景

lyhlyh answered 9 years, 6 months ago

从/proc/cupinfo信息可以看出,E5-2670V2有10核心(cpu cores)20超线程(siblings),你的服务器是双路(两个CPU),总计就是20核心40超线程.
要最大化程序的性能,就应该避免程序被网络或者文件IO阻塞,也应该避免CPU出现过多的上下文切换.
拿Linux上的Nginx来说,Nginx利用内核epoll实现网络异步,小文件用sendfile,大文件用AIO线程池,来尽量避免工人进程被阻塞,工作进程数则设为CPU核心数来避免CPU频繁上下文切换.
同理,运行在PHP-FPM的PHP代码,应该避免使用curl等可能会产生较长网络IO的代码,对于一些经过PHP验证身份后输出的附件,为了避免文件阻塞,可以用 header("X-Accel-Redirect: $file_path"); 委托给Nginx返回给客户端,最后,没了网络和文件IO的阻塞,就只剩下计算,这时PHP-FPM也是计算密集型应用,所以PHP-FPM工作进程数也可以设为CPU核心数.

可以在这台40超线程的服务器跑LAMP服务,看哪种情况下性能最佳:
10 Nginx + 30 PHP-FPM
15 Nginx + 25 PHP-FPM
40 Nginx + 40 PHP-FPM

scxzcv answered 9 years, 6 months ago

Your Answer