歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網

Nginx

日期:2017/3/1 12:20:45   编辑:關於Linux

Nginx性能優化可分為對操作系統的優化和隊Nginx本身的優化兩部分。

針對Nginx對Linux系統的優化

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 ][-d <數據節區大小>][-f <文件大小>][-m <內存大小>][-n <文件數目>][-p <緩沖區大小>][-s <堆疊大小>][-t ][-u <程序數目>][-v <虛擬內存大小>]

參數為:

   -a  顯示目前資源限制的設定。 
   -c   設定core文件的最大值,單位為區塊。 
   -d <數據節區大小>  程序數據節區的最大值,單位為KB。 
   -f <文件大小>  shell所能建立的最大文件,單位為區塊。 
   -H  設定資源的硬性限制,也就是管理員所設下的限制。 
   -m <內存大小>  指定可使用內存的上限,單位為KB。 
   -n <文件數目>  指定同一時間最多可開啟的文件數。 
   -p <緩沖區大小>  指定管道緩沖區的大小,單位512字節。 
   -s <堆疊大小>  指定堆疊的上限,單位為KB。 
   -S  設定資源的彈性限制。 
   -t   指定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消息的頻率

優化Nginx服務器

1、關閉訪問日志
根據相應的需要,進行相應模塊的日志記錄,如在http、server、location這些單獨的區段中配置日志記錄。

2、Nginx服務器配置優化

在server模塊的配置文件中設置:

worker_connections 65535
keepalive_timeout 60
client_header_buffer_size 8k
worker_rlimit_nofile 65535

當然還有很多對Nginx的優化,上邊簡單的學習記錄,希望對大家有幫助。

Copyright © Linux教程網 All Rights Reserved