cache占用高 文件delete cache
问题: 100g内存 结果内存有90+g内存被使用!
解决:
1、free -m的时候发现cached 较大,大约使用80G;分析可能和文件缓存在内存中相关
2、在/var 目录下查找大文件 du -lh 发现只有300M
3、那就只能认为是 文件被删除但是 文件还被占用! 导致文件一直缓存在cache中;怎样找到被rm的文件但是inode 还在的文件呢?
lsof -n| grep deleted
可以看到 被删除但是inode 被占用的文件
根据lsof -n| grep deleted 结果找到占用的进程 kill掉 让其回收解决问题
查看某个文件被哪些进程在读写
lsof 文件名
查看某个进程打开了哪些文件
lsof –c 进程名
lsof –p 进程号
lsof用法小全
lsof abc.txt 显示开启文件abc.txt的进程
lsof -i :22 知道22端口现在运行什么程序
lsof -c nsd 显示nsd进程现在打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程-d s 此参数以file descriptor (FD)值显示结果
寻找本地断开的打开文件
用户经常遇到这种情况,当一个进程正在向一个文件写数据时,该文件的目录可能被移动。这就产生了一个非常大的问题。例如,用户可能发现正在向/data写数据,但是却看不到文件增大,LSOF这个工具可以找到这样的错误,例如lsof +L1可以看到
-i [i] 用以监听有关的任何符合的位址。若没有相关位置被指定,则监听全部。
语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4位置
service --> /etc/service中的 service name (可以不只一个)
port --> 埠号 (可以不只一个)
# lsof -i tcp@xp001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
telnetd 26862 root0u inet 0x0c349000 0t0 TCP xpp3:telnet->xp001:3807 (ESTABLISHED)
telnetd 26862 root1u inet 0x0c349000 0t0 TCP xpp3:telnet->xp001:3807 (ESTABLISHED)
telnetd 26862 root2u inet 0x0c349000 0t0 TCP xpp3:telnet->xp001:3807 (ESTABLISHED)
telnetd 26986 root0u inet 0x1ab27100 0t0 TCP xpp3:telnet->xp001:3988 (ESTABLISHED)
telnetd 26986 root1u inet 0x1ab27100 0t0 TCP xpp3:telnet->xp001:3988 (ESTABLISHED)
telnetd 26986 root2u inet 0x1ab27100 0t0 TCP xpp3:telnet->xp001:3988 (ESTABLISHED)
如果想搜索IP地址为10.645.64.23的远程连接主机的所有网络连接,可以执行如下命令:
/usr/sbin/lsof –i@10.65.64.23可以打开系统中该远程知己所有打开的套接字。
# lsof -i@10.65.64.23