获取系统当前可用CPU核数
Nginx 1.3.8中有一处更新为允许给指令worker_processes设置auto参数,这将表示工程进程数将与当前系统可用CPU核数一致,挺方便实用的特性,看其具体实现。
首先是指令worker_processes的相关代码:
{ ngx_string("worker_processes"), NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, ngx_set_worker_processes, 0, 0, NULL },
直接关注其回调处理函数ngx_set_worker_processes():
static char * ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ... if (ngx_strcmp(value[1].data, "auto") == 0) { ccf->worker_processes = ngx_ncpu; return NGX_CONF_OK; } ...
可用看到,如果参数为auto,那么重点也就是全局变量ngx_ncpu,而它的值来之这里(在Linux环境下):
ngx_int_t ngx_os_init(ngx_log_t *log) { ... #if (NGX_HAVE_SC_NPROCESSORS_ONLN) if (ngx_ncpu == 0) { ngx_ncpu = sysconf(_SC_NPROCESSORS_ONLN); } #endif if (ngx_ncpu < 1) { ngx_ncpu = 1; } ...
通过查看sysconf的Man手册:http://linux.die.net/man/3/sysconf,其中_SC_NPROCESSORS_ONLN即表示当前可用的CPU核数:
_SC_NPROCESSORS_ONLN
The number of processors currently online (available).
当然,如果函数sysconf()执行失败而返回-1,那么接下来的两行代码将设置ngx_ncpu为1。
转载请保留地址:http://lenky.info/archives/2012/11/18/2032 或 http://lenky.info/?p=2032
备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。
法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以或书面等方式告知,本站将及时删除相关内容或链接。