linux小技巧:文件句柄排查与乱码文件名删除
前言
攒了几个 linux 小技巧,单独发太碎,合在一起记录:文件句柄占用排查(句柄打满的锅十有八九是它)、TIME_WAIT 过多的内核参数、还有删除乱码文件名文件。
1、文件句柄排查
服务报 Too many open files 的时候,先找到是谁把句柄吃光的:
|
|
调大句柄上限,root 登录:
|
|
2、TIME_WAIT 过多的内核调优
句柄之外的另一类资源耗尽是 TCP 的 TIME_WAIT 堆积。先看状态分布:
|
|
TIME_WAIT 状态的 socket 要等 2MSL 时间才回收,高并发短连接下会堆到几万个。在 /etc/sysctl.conf 里加参数:
|
|
生效:
|
|
提醒:
tcp_tw_recycle在 NAT 环境下会造成丢包,linux 4.12 起这个参数已被移除;新内核环境配tcp_tw_reuse加长连接化才是正路。老环境(centos 6/7)按上面配没问题。
3、删除/重命名乱码文件名文件
有些文件解压或转移后文件名变成乱码,终端里敲不出名字,rm 都删不掉。用 inode 编号操作:
|
|
批量把乱码文件改成编号文件名(awk 生成命令管道给 sh 执行):
|
|
原理说明:-inum 是 find 按 inode 查找的参数;-exec 后面跟 shell 命令,{} 代表 find 找到的当前文件,\; 表示命令结束。awk 里 $1 是 ls -i 输出的第一列(inode),++i 从 1 开始自增当文件序号。
总结
三个技巧的共同点:都是绕开「名字」直接操作底层资源——句柄看进程、TIME_WAIT 看内核参数、乱码文件看 inode。遇到名字层面解决不了的问题,换个层面下手往往就通了。
- 原文作者:Anttu
- 原文链接:https://anTtutu.github.io/post/2019-02-18-linux-tips-handle-garbage/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。