linux的php优化,linux优化转载
1. Open File Descriptors
Linux在系統調用,大量的系統調用都依賴于文件描述符,而文件描述符可分配給進程的最大大小由資源限制來定義。
因此,如果文件描述符大小不夠,或有不正常網絡連接(Socket也算)、文件IO沒有關閉并釋放出文件描述符。也可以說是文件句柄(File Operator),會導致出現Too many open files的錯誤。
該錯誤很常見,因此OP幾乎都有做優化。
使用如下命令可以查看系統相關的配置:
ulimit -u 查看open files設置
ulimit -a 查看所有配置
ulimit -u 65535 臨時修改open files為65535
ulimit -n 65536 用戶可以同時打開的最大文件數(max open files)
lsof -p pid ID 查看某進程當前打開的文件資源
針對所有用戶及session有效的長期修改方法為:
$ sudo vim /etc/security/limits.conf
# allow all users to open 100000 files
# alternatively, replace * with an explicit username
* soft nofile 100000 #限制單個進程最大文件句柄數
* hard nofile 100000
同時需要修改/etc/sysctl.conf,設置整個系統最大文件句柄數,運行sysctl -p生效
# /etc/sysctl.conf
# Increase system file descriptor limit
fs.file-max = 100000
2TCP time wait間隔指定的時間長度,一個socket在等待FIN數據包從發送者發送時強行關閉。如果TCP沒有進入CLOSED狀態,主動關閉在發送最后一個ack后,就會進入TIME_WAIT。
這在Cache軟件里最為常見,但其它Server也存在。
net.ipv4.tcp_fin_timeout = 30 ?保持FIN-WAIT-2狀態時間。
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1 開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認0,表示關閉
net.ipv4.tcp_tw_recycle = 1 開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
net.ipv4.ip_local_port_range = 1024 ? ?65000
# 表示用于向外連接的端口范圍。
# 缺省情況下很小:32768到61000,改為18000到65535。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN隊列的長度,默認1024,可以容納更多等待連接的網絡連接數。
net.ipv4.tcp_max_tw_buckets = 5000
# 表示系統同時保持TIME_WAIT套接字最大數量.
# 如果超出TIME_WAIT套接字將立刻被清除并打印警告信息。默認為180000,改為5000。
理解服務器tcp狀態
10
SYN_SEND ? ? 請求服務端建立連接。
SYN_RECEIVED 服務器接收到了來自客戶端的SYN。
ESTABLISHED ?客戶端接收到了服務端的SYN,會話建立完成。
LISTEN ? ? 服務器端開始接收連接。
FIN_WAIT_1 ? 指示活動結束。
TIMED_WAIT ? 客戶端在活動結束后將進入此狀態。
CLOSE_WAIT ? 表示被動關閉。服務器只是從客戶端收到第一個翼片。
FIN_WAIT_2 ? 客戶端從服務器收到其第一個 FIN 的確認。
LAST_ACK ? ? 發送自己的FIN后進入此狀態。
CLOSED ? ? ? 服務器從客戶端收到 ACK,連接已關閉。
附趙巖和我whoisd上面總結的
可以通過系統的sysctl.conf配置文件進行優化
1、減少處于FIN-WAIT-2連接狀態的時間,使系統可以處理更多的連接。
net.ipv4.tcp_fin_timeout = 2
如果由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
對端可以出錯并永遠不關閉連接,甚至意外當機,缺省值是60秒。
內核的通常值是180秒,可以按這個設置,但要記住的是,即使你的機器是一個輕載的WEB服務器,也有因為大量的死套接字而內存溢出的風險,FIN-WAIT-2的危險性比FIN-WAIT-1要小,因為它最多只能吃掉1.5K內存,但是它們的生存期長些。
2、以下兩參數可解決生產場景中大量連接的Web(cache)服務器中TIME_WAIT過多問題。
net.ipv4.tcp_tw_reuse = 1
表示開啟重用。允許將TIME-WAIT sockets重新用于新的 TCP 連接,默認為 0 表示關閉。
3、打開TIME-WAIT重用及回收功能。
net.ipv4.tcp_tw_recycle = 1
表示開啟TCP連接中TIME-WAIT sockets的快速收回功能,默認為 0 ,表示關閉。
4、當keepalive起用的時候,TCP發送keepalive消息的頻度,缺省是2小時,改為20分鐘。
net.ipv4.tcp_keepalive_time = 600
5、允許系統打開的端口范圍
net.ipv4.ip_local_port_range = 4000 ? ?65000
表示用于向外連接的端口范圍。缺省情況下很小:32768到61000,改為4000到65000。
6、提高系統支持的最大SYN半連接數(默認1024)
net.ipv4.tcp_max_syn_backlog = 16384
表示SYN隊列的長度,默認為1024,加大隊列長度為16384,可以容納最多等待連接的網絡連接數。
7、系統同時保持TIME_WAIT的最大數量
net.ipv4.tcp_max_tw_buckets = 360000
表示系統同時保持TIME_WAIT的最大數量,如果超過這個數字,TIME_WAIT將立刻被清除并打印警告信息。默認為180000,改為 5000。
對于Apache、Nginx等服務器,上幾行的參數可以很好地減少TIME_WAIT數量,但是對于Squid,效果卻不大。此項參數可以控制TIME_WAIT的最大數量,避免Squid服務器被大量的TIME_WAIT拖死。
8、路由緩存刷新頻率,當一個路由失敗后多長時間跳到另一個路由,默認是300。
net.ipv4.route.gc_timeout = 100
9、在內核放棄建立連接之前發送SYN包的數量。
net.ipv4.tcp_syn_retries = 1
10、減少系統SYN連接重試次數(默認是5)
net.ipv4.tcp_synack_retries = 1
為了打開對端的連接,內核需要發送一個SYN并附帶一個回應前面一個SYN的ACK。
也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄連接之前發送SYN+ACK包的數量。
11、設置系統對最大跟蹤的TCP連接數的限制
net.ipv4.ip_conntrack_max = 25000000
一個完整的sysctl.conf文件
# /etc/sysctl.conf
# Increase system file descriptor limit
fs.file-max = 100000
# Discourage Linux from swapping idle processes to disk (default = 60)
vm.swappiness = 10
# Increase ephermeral IP ports
net.ipv4.ip_local_port_range = 10000 65000
# Increase Linux autotuning TCP buffer limits
# Set max to 16MB for 1GE and 32M (33554432) or 54M (56623104) for 10GE
# Don't set tcp_mem itself! Let the kernel scale it based on RAM.
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.optmem_max = 40960
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Make room for more TIME_WAIT sockets due to more clients,
# and allow them to be reused if we run out of sockets
# Also increase the max packet backlog
net.core.netdev_max_backlog = 50000
net.ipv4.tcp_max_syn_backlog = 30000
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
# Disable TCP slow start on idle connections
net.ipv4.tcp_slow_start_after_idle = 0
# If your servers talk UDP, also up these limits
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192
# Disable source routing and redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
# Log packets with impossible addresses for security
net.ipv4.conf.all.log_martians = 1
總結
以上是生活随笔為你收集整理的linux的php优化,linux优化转载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php两个数组去掉相同的,php如何删除
- 下一篇: linux中menu命令,menucof