web优化之nginx优化详解
这里我们接着web之nginx优化<->继续分析更改默认用户、调整work线程数,并发连接数,文件描述符,CPU的亲和力、hash表中控制大小、开启高效传输模式和函数的重要性。
2.更改nginx的默认用户
在高标准环境下尽量不使用root,尽量使用普通用户,这样外部人员提权也提不到root用户。
搭建服务的时候就用普通用户搭建,生产环境下最好不要随便用root用户。
3.调整work线程数,并发连接数,文件描述符,CPU的亲和力
1) worker_process 调成CPU的核数 x2
2)并发链接是单个worker的并发链接
vim /application/nginx/conf/nginx.conf worker_connections 20480; Max_client=worker_processes*worker_connections。
备注:
并发量太大也不好;但如果前端没有很大的访问量,这里设置多少也没关系,设置为极限即可
3)配置进程打开的文件数
worker_rlimit_nofile 65535;
4)查CPU的核数 grep "physical id" /proc/cpuinfo
4.调整事件处理模型
taskset -c 1,2,3 /etc/init.d/mysql start
备注:
另外(taskset - retrieve or set a process’s CPU affinity)命令本身也有分配CPU的功能
5.hash表中控制大小
server_names_hash_max_size和server_names_hash_bucket_size
调整域名的hash表大小
server_names_hash_max_size 512; server_names_hash_bucket_size 64;
参数作用:设置存放域名(server names)的最大哈希表大小
参数作用:设置存放域名(server names)的最大哈希表的存储桶(bucket)的大小。
默认值依赖CPU的缓存行。
http://nginx.org/en/docs/ngx_core_module.html
6.开启高效的传输函数
sendfile on;
参数作用:激活或者禁用sendfile()功能。
sendfile()是作用于两个文件描述符之间的数据拷贝函数,这个拷贝操作是在内核上的,被称为“零拷贝”,sendfile()比read和write函数要高效很多,因为,read个write函数要把数据拷贝到应用层在进行操作。相关控制参数还有sendfile_max_chunk,读者可以自行查询。
7.开启高效传输模式
tcp_nopush on;
tcp_nopush参数可以允许把http response header和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量。
更多优化见http://7826443.blog.51cto.com/7816443/1705051