标签:
Nginx性能优化可分为对操作系统的优化和队Nginx本身的优化两部分。
1、关闭不必要的服务
根据自己Linux服务器部署的项目需求,进行相应的关闭不必要的服务或进程。
2、优化写磁盘操作
我们指导,Nginx每次访问一个文件的时候,Linux系统将会对他的“Access”,即访问时间进行修改对于查看一个文件被修改的时间,可以使用stat 文件名
的方式进行查看,例如:
[root@iZ94sni08orZ conf]# stat nginx.conf
File: "nginx.conf"
Size: 2656 Blocks: 8 IO Block: 4096 普通文件
Device: ca01h/51713d Inode: 660555 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1001/ UNKNOWN) Gid: ( 1001/ UNKNOWN)
Access: 2015-11-18 16:31:05.221629056 +0800
Modify: 2015-04-21 22:11:59.000000000 +0800
Change: 2015-11-18 10:30:10.421498579 +0800
[root@iZ94sni08orZ conf]#
列出了访问的时间,所以对于一个高并发的访问系统中,这些磁盘写操作对系统的影响还是挺大的,因此要关闭该功能。
/dev/sdb1 /dataext3 defaults 0 0
修改为如下配置:
/dev/sdb1 /dataext3 defaults,noatime,nodiratime 0 0
然后重新启动系统,使之生效。
或者不重启系统的话可以使用remount选项来重新挂载:
-->mount -o defaults,noatime,nodiratime -o remount /dev/sdb1 /sdb
-->mount | grep sdb1
/dev/sdb1 on /sdb type ext3 (rw,noatime,nodiratime)
如果是单独挂载的分区或者磁盘,可以直接执行命令:
-->mount -o defaults,noatime,nodiratime /dev/sdb1 /sdb
-->mount | grep sdb1
/dev/sdb1 on /sdb type ext3 (rw,noatime,nodiratime)
3、优化资源限制
Linux有一条命令为ulimit:用于控制shell程序的资源,用于shell启动进程所占用的资源,其语法为:
ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]
参数为:
-a 显示目前资源限制的设定。
-c <core文件上限> 设定core文件的最大值,单位为区块。
-d <数据节区大小> 程序数据节区的最大值,单位为KB。
-f <文件大小> shell所能建立的最大文件,单位为区块。
-H 设定资源的硬性限制,也就是管理员所设下的限制。
-m <内存大小> 指定可使用内存的上限,单位为KB。
-n <文件数目> 指定同一时间最多可开启的文件数。
-p <缓冲区大小> 指定管道缓冲区的大小,单位512字节。
-s <堆叠大小> 指定堆叠的上限,单位为KB。
-S 设定资源的弹性限制。
-t <CPU时间> 指定CPU使用时间的上限,单位为秒。
-u <程序数目> 用户最多可开启的程序数目。
-v <虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB。
根据参数的功能,可以使用ulimit -a
来列举资源的限制信息:
[root@iZ94sni08orZ ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3870
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 3870
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@iZ94sni08orZ ~]#
上图是我的CentOS7.0的信息,然后使用命令,对系统针对Nginx进行优化,可以使用下边的命令对-n所对应的资源进行无限制,也就是系统所支最大的值:ulimit -n unlimited
或者ulimit -n 数目
来修改。
也可以通过修改配置文件的方式进行修改:
vim /etc/security/limits.conf
该文件只有两行,其他的都为注释内容:
* soft nofile 65535
* hard nofile 65535
将其修改为:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
上述修改之后需后需要重新启动菜而已生效。
4、优化内核TCP选项
修改一下内核参数,该文件在/etc/sysctl.conf
,包含内容注释,都可以看懂,默认内容为:
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
# Controls source route verification
# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
# Controls the use of TCP syncookies
# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
# Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65536
# Controls the maximum size of a message, in bytes
kernel.msgmax = 65536
# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.lo.arp_announce=2
将对应的属性设置下列值,有的修改,没有的加上去:
net.ipv4.tcp_max_tw_buckets = 6000 #设置timewait的值,默认为180000
net.ipv4.ip_local_port_range = 1024 65000 #设置允许洗头膏打开的端口范围,默认为32768-61000
net.ipv4.tcp_tw_recycle = 1 #设置是否启用timewait快速回收,默认为0
net.ipv4.tcp_tw_reuse = 1 #设置是否开启重新使用,即允许TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_syncookies = 1 #设置是否开启SYN Cookies,如果启用,那么SYN等待队列一处是,则使用Cookies处理,默认为0
net.core_somaxconn = 262144 #
net.core_netdev_max_backlog = 262144 #用于设置被传送到队列数据包的最大数目,在网卡接受数据包的速率比内核处理数据包的速率快时,那么会出现排队现象,这个参数就是用来设置该队列的大小
net.ipv4.tcp_max_orphans = 262144 #设置Linux能够处理不属于任何进程的套接字数量,即处理孤儿进程
net.ipv4.tcp_max_syn_backlog = 262144 #用于记录尚未收到客户端确认信息的链接请求的最大值
net.ipv4.tcp_timestamps = 0 #设置时间戳作为序列号,设置为0表示关闭该功能
net.ipv4.tcp_synack_retries = 1 #设置SYN重试的次数,默认为5,在TCP的三次握手中的第二次握手,内核需要发送一个回应前面一个SYN的ACK的SYN,就是说wile打开对方的链接,内核发出的SYN的次数。减少该参数的值有利于避免DDos攻击
net.ipv4.tcp_syn_retries = 1 #设置内核放弃建立链接之前发送SYN包的数量
net.ipv4.tcp_fin_timeout = 1 #决定它包吃FIN-WAIT-2状态的时间
net.ipv4.tcp_keepalive_time = 30 #当启用该功能是,该参数用于设置TCP发送keepalive消息的频率
1、关闭访问日志
根据相应的需要,进行相应模块的日志记录,如在http、server、location这些单独的区段中配置日志记录。
2、Nginx服务器配置优化
在server模块的配置文件中设置:
worker_connections 65535
keepalive_timeout 60
client_header_buffer_size 8k
worker_rlimit_nofile 65535
当然还有很多对Nginx的优化,上边简单的学习记录,希望对大家有帮助。
标签:
原文地址:http://blog.csdn.net/xlgen157387/article/details/50017507