如何知道运行多少个进程最有效率?
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
从/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
一般来讲和机器的核数相同算是效率较高的吧,具体还要看程序场景
这个要看所运行的进程是什么性质的。
如果是CPU密集型的,比如计算圆周率,有多少processer就分配多少就行了
如果是IO密集型,比如大多数的web应用,还每个processer只分配一个进程就太浪费了,一般可以根据具体情况而定,可以分配2~10个