一、如果磁盘满了,但是df命令查看还有剩余:
du / -h --max-depth=1 命令查看各个目录的占用空间,找到占用较多空间的目录;
使用 lsof 检查,也可能是文件删除了,但是进程还在(占用);
df -i 命令查看 inode 的使用率,inode 不够也会导致此问题;
二、TimeWait问题优化方案
查看状态为TIME_WAIT的TCP连接$ netstat -tan |grep TIME_WAIT
统计TCP各种状态的连接数$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(i in S) print i, S[i]}'
MySQL卡死使用命令检查发现TIME_WAIT非常多,这时候可以修改系统内核参数文件vim /etc/sysctl.conf(因版本问题参数文件变成“
/usr/lib/sysctl.d/00-system.conf”(7版本之后))
增加:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后:systcl -p 命令使修改生效
#####
net.ipv4.tcp_syncookies = 1
//表示开启SYN cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
//表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
//表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_fin_timeout = 30
//修改系統默认的 TIMEOUT 时间
linux中MSL的值默认为60s,可以通过缩减MSL值来使得主动关闭连接一端由TIME_WAIT状态到关闭状态的时间减少(默认为四次挥手后等待60s关闭连接)
但是会导致延迟报文无法清除以及主动关闭连接一端不能收到重传来的FIN请求,也会影响基于TCP的应用的连接复用和调优
所以在实际生产环境中,需要谨慎操作
#查看默认的MSL值
$cat /proc/sys/net/ipv4/tcp_fin_timeout
#修改
$echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
或者
$ vim /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
2.1 在HTTP/1.0协议中默认使用短连接,会导致TIME_WAIT非常多;可以将HTTP请求头里connection的值设置为:keep-alive。将短连接改成长连接