龙空技术网

Linux 不杀进程的情况下,如何释放磁盘资源

幸福梦影视 143

前言:

眼前咱们对“linux ftp not found”大体比较关切,我们都想要学习一些“linux ftp not found”的相关资讯。那么小编也在网络上收集了一些关于“linux ftp not found””的相关知识,希望你们能喜欢,我们一起来了解一下吧!

最近项目组人员反馈一个问题:即磁盘空间满了,但是并没看到有什么文件占用空间:

我协助进行了处理。

[root@xxxx home]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/xvda2 40G 6.4G 31G 18% /

tmpfs 7.8G 0 7.8G 0% /dev/shm

/dev/xvda1 190M 46M 135M 26% /boot

/dev/xvda3 40G 39G 0G 100% /home

/dev/xvda5 40G 49M 38G 1% /tmp

[root@xxxx home]# pwd

/home

[root@xxxx home]# du -sh

5.4G .

[root@xxxx home]# ls -a

. .. appuser ftp_dir linux lost+found

为什么磁盘空间大小显示不准确呢?

有隐藏文件?还是其他原因?

du -sh 命令统计了整体的空间使用率,隐藏文件也能被统计进去。

ls -lah 也能显示 隐藏文件,并不是隐藏文件导致的。

然后想到是不是有些文件被删除,但是资源并未释放呢?

在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被

打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。

查看被打开的已删除文件

[root@xxxx home]# lsof -n | grep deleted

java 27319 root 1w REG 202,3 25981280125 790834 /home/appuser/tomcat7-MIR-20012/logs/catalina.out (deleted)

java 27319 root 2w REG 202,3 25981280125 790834 /home/appuser/tomcat7-MIR-20012/logs/catalina.out (deleted)

java 27319 root 8w REG 202,3 1224 790864 /home/appuser/tomcat7-MIR-20012/logs/localhost.2017-10-23.log (deleted)

java 27319 root 42w REG 202,3 273 789028 /home/appuser/tomcat7-MIR-20012/logs/localhost_access_log.2018-03-14.txt (deleted)

java 39917 root 8w REG 202,3 1221 790840 /home/appuser/tomcat7-IMR-20010/logs/localhost.2017-10-18.log (deleted)

java 55250 root 7w REG 202,3 19906 790794 /home/appuser/tomcat7-MIR-20012/logs/catalina.2018-02-03.log (deleted)

java 55250 root 8w REG 202,3 1837 790795 /home/appuser/tomcat7-MIR-20012/logs/localhost.2018-02-03.log (deleted)

java 55516 root 1w REG 202,3 12643031059 788725 /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted)

java 55516 root 2w REG 202,3 12643031059 788725 /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted)

果然存在未释放资源。一个占用了大约24G,一个占用了大约12G,这不就是占满了嘛!而且都是catalina.out 日志文件

验证该文件是否存在:

[root@xxxx ~]# ll /home/appuser/tomcat7-MIR-20012/logs/catalina.out

-rw-r--r-- 1 root root 1 4月 52124 12:48 /home/appuser/tomcat7-MIR-20012/logs/catalina.out

文件居然存在的,但是没那么大啊。

再看其他文件:

[root@xxxx ~]# ll /home/appuser/tomcat7-SI-20011/logs/catalina.out

ls: 无法访问/home/appuser/tomcat7-SI-20011/logs/catalina.out: 没有那个文件或目录

这个文件倒是真的不存在。

那么能通过创建文件的方式解决吗?

[root@xxxx ~]# > /home/appuser/tomcat7-SI-20011/logs/catalina.out

[root@xxxx ~]# ll /home/appuser/tomcat7-SI-20011/logs/catalina.out

-rw-r--r-- 1 root root 0 4月 19 13:30 /home/appuser/tomcat7-SI-20011/logs/catalina.out

[root@xxxx ~]# lsof -n | grep deleted

java 27319 root 1w REG 202,3 25981280125 790834 /home/appuser/tomcat7-MIR-20012/logs/catalina.out (deleted)

java 27319 root 2w REG 202,3 25981280125 790834 /home/appuser/tomcat7-MIR-20012/logs/catalina.out (deleted)

java 27319 root 8w REG 202,3 1224 790864 /home/appuser/tomcat7-MIR-20012/logs/localhost.2017-10-23.log (deleted)

java 27319 root 42w REG 202,3 273 789028 /home/appuser/tomcat7-MIR-20012/logs/localhost_access_log.2018-03-14.txt (deleted)

java 39917 root 8w REG 202,3 1221 790840 /home/appuser/tomcat7-IMR-20010/logs/localhost.2017-10-18.log (deleted)

java 55250 root 7w REG 202,3 19906 790794 /home/appuser/tomcat7-MIR-20012/logs/catalina.2018-02-03.log (deleted)

java 55250 root 8w REG 202,3 1837 790795 /home/appuser/tomcat7-MIR-20012/logs/localhost.2018-02-03.log (deleted)

java 55516 root 1w REG 202,3 12643031059 788725 /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted)

java 55516 root 2w REG 202,3 12643031059 788725 /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted))

创建文件并不能释放资源。

清空文件呢?

[root@xxxx ~]# > /home/appuser/tomcat7-MIR-20012/logs/catalina.out

[root@xxxx ~]# ll /home/appuser/tomcat7-MIR-20012/logs/catalina.out

-rw-r--r-- 1 root root 0 4月 19 13:32 /home/appuser/tomcat7-MIR-20012/logs/catalina.out

[root@xxxx ~]# lsof -n | grep deleted

java 27319 root 1w REG 202,3 25981280125 790834 /home/appuser/tomcat7-MIR-20012/logs/catalina.out (deleted)

java 27319 root 2w REG 202,3 25981280125 790834 /home/appuser/tomcat7-MIR-20012/logs/catalina.out (deleted)

java 27319 root 8w REG 202,3 1224 790864 /home/appuser/tomcat7-MIR-20012/logs/localhost.2017-10-23.log (deleted)

java 27319 root 42w REG 202,3 273 789028 /home/appuser/tomcat7-MIR-20012/logs/localhost_access_log.2018-03-14.txt (deleted)

java 39917 root 8w REG 202,3 1221 790840 /home/appuser/tomcat7-IMR-20010/logs/localhost.2017-10-18.log (deleted)

java 55250 root 7w REG 202,3 19906 790794 /home/appuser/tomcat7-MIR-20012/logs/catalina.2018-02-03.log (deleted)

java 55250 root 8w REG 202,3 1837 790795 /home/appuser/tomcat7-MIR-20012/logs/localhost.2018-02-03.log (deleted)

java 55516 root 1w REG 202,3 12643031059 788725 /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted)

java 55516 root 2w REG 202,3 12643031059 788725 /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted))

清空文件也不能释放资源。

正常来说直接把进程杀了,资源立刻就能被释放。但是这是生产环境,问了开发人员进程不能杀,那怎么办呢?

最彻底的方法当然就是重启进程,杀进程或重启服务器。但是不能杀的情况下,怎么释放资源呢?

当linux打开一个文件的时候,Linux内核会为每一个进程在/proc 目录下创建建立一个以其pid

为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd(fd:file descriptor)。

目录格式类似/proc/27319/fd

那么我们进到目录下,看有哪些文件被占用:

[root@xxxx fd]# cd /proc/27319/fd

[root@xxxx fd]# ls

0 10 12 14 16 18 2 21 23 25 27 29 30 32 34 36 38 4 41 43 45 47 49 50 7 82 84 9

1 11 13 15 17 19 20 22 24 26 28 3 31 33 35 37 39 40 42 44 46 48 5 6 8 83 86

[root@xxxx fd]# ll | grep deleted

l-wx------ 1 root root 64 4月 19 12:25 1 -> /home/appuser/tomcat7-MIR-20012/logs/catalina.out (deleted)

l-wx------ 1 root root 64 4月 19 12:25 2 -> /home/appuser/tomcat7-MIR-20012/logs/catalina.out (deleted)

l-wx------ 1 root root 64 4月 19 12:25 42 -> /home/appuser/tomcat7-MIR-20012/logs/localhost_access_log.2018-03-14.txt (deleted)

l-wx------ 1 root root 64 4月 19 12:25 8 -> /home/appuser/tomcat7-MIR-20012/logs/localhost.2017-10-23.log (deleted)

果然文件都是以链接的形式存在的,那么我们查看文件

/home/appuser/tomcat7-MIR-20012/logs/catalina.out

就相当于读取的这里的文件1,

文件1能直接查看吗?

[root@xxxx fd]# more 1

2016-04-19 12:55:01 [cn.sh.xxx.mir.local.rule.allocation.impl.DefautAllocationRule]-[INFO] 技能组:3600上没有空闲的坐席!

2016-04-19 12:55:02 [cn.sh.xxx.mir.local.executor.AllocationTask]-[INFO] 开始分配任务,队列:3600 任务数:1 空闲坐席:0

[root@xxxx fd]# tail 1

2018-04-19 14:09:14 [cn.sh.xxx.mir.local.executor.AllocationTask]-[INFO] 开始分配任务,队列:365 任务数:3 空闲坐席:0

2018-04-19 14:09:14 [cn.sh.xxx.mir.local.rule.allocation.impl.AbstractAllocationRule]-[INFO] 获取租户514000技能队列3600上签入的坐席数据!

2018-04-19 14:09:14 [cn.sh.xxx.mir.local.rule.allocation.impl.DefautAllocationRule]-[INFO] 技能组:3600上没有空闲的坐席!

2018-04-19 14:09:14 [cn.sh.xxx.mir.local.executor.AllocationTask]-[INFO] 开始分配任务,队列:3600 任务数:1 空闲坐席:0

2018-04-19 14:09:14 [cn.sh.xxx.mir.local.rule.allocation.impl.AbstractAllocationRule]-[INFO] 获取租户514000技能队列3650上签入的坐席数据!

2018-04-19 14:09:14 [cn.sh.xxx.mir.local.rule.allocation.impl.DefautAllocationRule]-[INFO] 技能组:3650上没有空闲的坐席!

2018-04-19 14:09:14 [cn.sh.xxx.mir.local.executor.AllocationTask]-[INFO] 开始分配任务,队列:3650 任务数:1 空闲坐席:0

2018-04-19 14:09:14 [cn.sh.xxx.mir.local.rule.allocation.impl.AbstractAllocationRule]-[INFO] 获取租户514000技能队列3490上签入的坐席数据!

2018-04-19 14:09:14 [cn.sh.xxx.mir.local.rule.allocation.impl.DefautAllocationRule]-[INFO] 技能组:3490上没有空闲的坐席!

2018-04-19 14:09:14 [cn.sh.xxx.mir.local.executor.AllocationTask]-[INFO] 开始分配任务,队列:3490 任务数:1 空闲坐席:0

果然能直接查看,而且保留了2016年的日志,怪不得这么大。而且时刻在往里面写日志。

再检查我们刚才创建的文件,日志没写进去。

既然如此,那我们把这个日志文件清理了,空间不就降下来了嘛!

[root@xxxx fd]# > 1

[root@xxxx 55516]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/xvda2 40G 6.4G 31G 18% /

tmpfs 7.8G 0 7.8G 0% /dev/shm

/dev/xvda1 190M 46M 135M 26% /boot

/dev/xvda3 40G 15G 23G 39% /home

/dev/xvda5 40G 49M 38G 1% /tmp

空间顺利释放,同样办法我们把另一个日志也清理掉。

java 55516 root 1w REG 202,3 12643031059 788725 /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted)

[root@xxxx 55516]# cd /proc/55516/fd

[root@xxxx fd]# ls -l | grep deleted

l-wx------ 1 root root 64 4月 19 12:25 1 -> /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted)

l-wx------ 1 root root 64 4月 19 12:25 2 -> /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted)

[root@xxxx fd]# > 1

[root@xxxx fd]# lsof -n | grep deleted

java 27319 root 1w REG 202,3 7100981 790834 /home/appuser/tomcat7-MIR-20012/logs/catalina.out (deleted)

java 27319 root 2w REG 202,3 7100981 790834 /home/appuser/tomcat7-MIR-20012/logs/catalina.out (deleted)

java 27319 root 8w REG 202,3 1224 790864 /home/appuser/tomcat7-MIR-20012/logs/localhost.2017-10-23.log (deleted)

java 27319 root 42w REG 202,3 273 789028 /home/appuser/tomcat7-MIR-20012/logs/localhost_access_log.2018-03-14.txt (deleted)

java 39917 root 8w REG 202,3 1221 790840 /home/appuser/tomcat7-IMR-20010/logs/localhost.2017-10-18.log (deleted)

java 55250 root 7w REG 202,3 19906 790794 /home/appuser/tomcat7-MIR-20012/logs/catalina.2018-02-03.log (deleted)

java 55250 root 8w REG 202,3 1837 790795 /home/appuser/tomcat7-MIR-20012/logs/localhost.2018-02-03.log (deleted)

java 55516 root 1w REG 202,3 2480 788725 /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted)

java 55516 root 2w REG 202,3 2480 788725 /home/appuser/tomcat7-SI-20011/logs/catalina.out (deleted)

[root@xxxx fd]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/xvda2 40G 6.4G 31G 18% /

tmpfs 7.8G 0 7.8G 0% /dev/shm

/dev/xvda1 190M 46M 135M 26% /boot

/dev/xvda3 40G 2.5G 35G 7% /home

/dev/xvda5 40G 49M 38G 1% /tmp

通过以上方式,在不杀进程的情况下,顺利释放了磁盘空间。但这只是一个临时的处理方式。

该文件不释放就会持续增长下去。

仍然需要项目组预约一个维护窗口,把所有进程都杀掉,彻底释放被占用才算彻底解决。

标签: #linux ftp not found