查看连接数
netstat -n | wc -l # 总连接数
netstat -n | grep -i time_wait | wc -l # time_wait 连接数
netstat -anp # 查看占用端口过多的程序
tcp复用解决方案
网上大部分解决方案是修改sysctl.conf回收重用ipv4连接,但是可能带来其他问题
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time = 600
nginx fastcgi(php) 解决方案
修改nginx.conf
upstream fastcgi_backend {
server 127.0.0.1:9000;
keepalive 60;
}
location ~ \.php$ {
fastcgi_pass fastcgi_backend;
fastcgi_keep_conn on;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
主要是 fastcgi_keep_conn on 与 upstream 的 keepalive
nginx + proxy (python/go/java) 解决方案
upstream wxpic {
keepalive 60;
server 127.0.0.1:xxx;
}
server {
keepalive_requests 10000; # 默认100
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
主要是 proxy_http_version, proxy_set_header Connection ""以及keepalive_requests
mysql/数据库连接解决方案
修改yii数据库配置采用长链接
'db' => [
'class' => 'yii\db\Connection',
'dsn' => '*', 'username' => '*',
'password' => '*',
'charset' => 'utf8mb4',
'attributes' => [
PDO::ATTR_PERSISTENT => true
]
],