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 --&gt IPv4 or IPv6
  protocol --&gt TCP or UDP
  hostname --&gt Internet host name
  hostaddr --&gt IPv4位置
   service --&gt /etc/service中的 service name (可以不只一个)
  port --&gt 埠号 (可以不只一个)

  # 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

posted @ 2021-05-13 10:02  codestacklinuxer  阅读(214)  评论(0编辑  收藏  举报