王志广的个人博客

        王志广的个人博客 >> PHP >> Nginx优化介绍和Linux架构简单描述

Nginx优化介绍和Linux架构简单描述

admin发表于2015-08-29  1,149次浏览 标签: 

主要讲解nginx优化中的,第三方TCMalloc、linux内核、nginx自身、PHP-fpm优化,以及简单说明下现在的存在的BBS架构

1.TCMalloc优化Nginx
TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具“google-perftools”中的一个成员
先安装libunwind
可以从http://download.savannah.gnu.org/releases/libunwind下载相应的libunwind版
tar zxvf libunwind.tar.gz
cd libunwinda/
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
然后安装google-perftools
可以从http://google-perftools.googlecode.com下载相应的google-perftools版本
tar zxvf google-perftools.gz
cd google-perftools/
./configure
make && make install
echo “/usr/local/lib” > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig
为了使Nginx支持google-perftools,需要在安装过程中添加“–with-google_perftools_module”选项重新编译Nginx
为google-perftools添加线程目录,文件放在/tmp/tcmalloc下
mkdir /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc
修改nginx.conf
#pid logs/nginx.pid;
google_perftools_profiles /tmp/tcmalloc;
重启nginx就可以完成对google-perftools的加载
查看 lsof -n | grep tcmalloc

2.linux内核优化
net.ipv4.tcp_max_tw_buckets = 6000 #参数用来设定timewait的数量
net.ipv4.ip_local_port_range = 1024 #65000 选项用来设定允许系统打开的端口范围
net.ipv4.tcp_tw_recycle = 1 #选项用于设置启用timewait快速回收
net.ipv4.tcp_tw_reuse = 1 #选项用于设置开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_syncookies = 1 #选项用于设置开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies进行处理
net.core.somaxconn = 262144 #选项默认值是128, 这个参数用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此,需要结合并发请求数来调节此值
net.core.netdev_max_backlog = 262144 #选项表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目
net.ipv4.tcp_max_orphans = 262144 #选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立连接将立即被复位并打印出警告信息。这个限制只是为了防止简单的DoS攻击。不能过分依靠这个限制甚至人为减小这个值,更多的情况是增加这个值
net.ipv4.tcp_max_syn_backlog = 262144 #选项用于记录那些尚未收到客户端确认信息的连接请求的最大值。对于有128MB内存的系统而言,此参数的默认值是1024,对小内存的系统则是128
net.ipv4.tcp_synack_retries = 1 #参数的值决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_syn_retries = 1 #选项表示在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_fin_timeout = 1 #选项决定了套接字保持在FIN-WAIT-2状态的时间。默认值是60秒。正确设置这个值非常重要,有时候即使一个负载很小的Web服务器,也会出现因为大量的死套接字而产生内存溢出的风险
net.ipv4.tcp_keepalive_time = 30 #选项表示当keepalive启用的时候,TCP发送keepalive消息的频度。默认值是2(单位是小时)
将上面的内核参数值加入/etc/sysctl.conf文件中,然后执行如下命令使之生效:
写入执行 /sbin/sysctl -p
下面是完整的配置信息
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000

3.nginx自身优化
worker_processes 8;#nginx 进程数
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;#分配cpu
worker_rlimit_nofile 65535;#一个nginx 进程打开的最多文件描述符数目
worker_connections 65535;#每个进程允许的最多连接数
keepalive_timeout 60;#keepalive 超时时间
client_header_buffer_size 4k;#客户端请求头部的缓冲区大小
open_file_cache max=65535 inactive=60s;#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存
open_file_cache_valid 80s;#这个是指多长时间检查一次缓存的有效信息
open_file_cache_min_uses 1;#指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的
配置文件列子
user www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000
01000000;
error_log /www/log/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 204800;
events{use epoll;worker_connections 204800;}
http
{
include mime.types;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
keys_zone=TEST:10m
inactive=5m;
fastcgi_connect_timeout 300;#指定连接到后端FastCGI 的超时时间
fastcgi_send_timeout 300;#向FastCGI 传送请求的超时时间
fastcgi_read_timeout 300;#接收FastCGI 应答的超时时间
fastcgi_buffer_size 4k;#指定读取FastCGI 应答第一部分需要用多大的缓冲区
fastcgi_buffers 8 4k;#指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答
fastcgi_busy_buffers_size 8k;#默认值是fastcgi_buffers 的两倍
fastcgi_temp_file_write_size 8k;#默认值是fastcgi_buffers 的两倍
fastcgi_cache TEST;#开启FastCGI 缓存并且为其制定一个名称
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;#为指定的应答代码指定缓存时间
fastcgi_cache_min_uses 1;#缓存在fastcgi_cache_path 指令inactive 参数值时间内的最少使用次数
fastcgi_cache_use_stale error timeout invalid_header http_500;
open_file_cache max=204800 inactive=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
server
{
listen 8080;
server_name backup.aiju.com;
index index.php index.htm;
root /www/html/;
location /status
{
stub_status on;
}
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires 30d;
}
log_format access ‘$remote_addr — $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for’;
access_log /www/log/access.log access;
}
}

4.PHP-fpm优化
需要修改php-fpm.conf
[global]
pid = run/php-fpm.pid
process_control_timeout=5
[www]
listen.allowed_clients = 127.0.0.1
user=www-data
group=www-data
pm=dynamic
pm.max_children=20(这个配置决定了php-fpm的总进程数,内存小的少设点)
pm.max_requests=10000(并发数越大,此请求数应越大)
pm.start_servers =10(初始php-fpm进程数)
emergency_restart_threshold = 60
emergency_restart_interval = 60s

5.ulimit优化
#ulimit -n
#ulimit –u
server 只允许同时打开 1024 个文件,处理 1024 个用户进程

Linux架构简单描述
BBS架构是基于squid、nginx和lvs等技术,从架构上对bbs进行全面优化和保护,特点高新能高保障和高可用。
它使用LVS作为入口,然后nginx+squid作为最前端的缓存组合,
百度内部主要是用的BVS,BVS是在lvs基础上做了优化。

你可以发表评论引用到你的网站或博客,或通过RSS 2.0订阅这个日志的所有评论。
上一篇:
下一篇:
没有评论
我来说两句

  Ctrl+Enter