Linux删除文件磁盘空间不释放及常见问题的解决思路

Linux常见问题


问题来源

朋友通过Discuz搭建了一个pixel的手机社区论坛,并运营了几年,目前Alexa全球排名10000以内。

但是前几天突然不能访问了,苦于没有技术人员,不知和解,向本人求救。

第一步:ping主机

可以ping通,至少说明网络是OK的

ping示例:

root@vps:~# ping www.xtuz.net

PING www.xtuz.net (104.200.67.118) 56(84) bytes of data.
64 bytes from vps.server.com (104.200.67.118): icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from vps.server.com (104.200.67.118): icmp_seq=2 ttl=64 time=0.030 ms
64 bytes from vps.server.com (104.200.67.118): icmp_seq=3 ttl=64 time=0.027 ms
64 bytes from vps.server.com (104.200.67.118): icmp_seq=4 ttl=64 time=0.031 ms
64 bytes from vps.server.com (104.200.67.118): icmp_seq=5 ttl=64 time=0.026 ms
64 bytes from vps.server.com (104.200.67.118): icmp_seq=6 ttl=64 time=0.029 ms

第二步:查看ssh是否可以正常登录主机

通过Putty远程登录到服务器,如果可以正常登录,至少证明机器还是可以响应的。如果机器负载很高的话,连登录都不行。

第三步:查看负载情况

登录主机后通过uptime查看了机器的负载情况,还好,不是很高。

uptime的输出信息包括:

  • 系统现在的时间
  • 系统从上次开机到现在运行了多长时间
  • 系统目前有多少登陆用户
  • 系统在1分钟内、5分钟内、15分钟内的平均负载

uptime示例:

root@vps:~# uptime
 03:28:39 up 30 days, 18:19,  1 user,  load average: 0.16, 0.06, 0.04

第四步:查看内存使用情况

通过free命令查看机器的内存情况,如果都有剩余则没问题

示例:

root@vps:~# free -m
              total        used        free      shared  buff/cache   available
Mem:            512         118         249          32         144         301
Swap:          1024          28         995

其中参数说明如下:

参数 说明
total 内存总数,物理内存总数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总额
buff/cache 缓存
available 可以被应用程序使用的内存

基本说明:

  • total = buff/cache + free + used
  • available = free + buffer/cache 这只是一个很理想的计算方式,实际中的数据往往有较大的误差

注意:

  • free 是真正尚未被使用的物理内存数量
  • available 是从应用程序的角度看到的可用内存数量, 如果应用程序内存不够了,内核就会从从buffer/cache回收内存来满足应用程序

第五步:查看硬盘使用情况

通过df命令查看硬盘被占用了多少空间,目前还剩下多少空间等信息

示例如下:

root@vps:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            414M     0  414M   0% /dev
tmpfs            87M  9.4M   78M  11% /run
/dev/vda1        50G  4.7G   43G  10% /
tmpfs           433M   13M  420M   3% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           433M     0  433M   0% /sys/fs/cgroup
tmpfs            87M     0   87M   0% /run/user/500

朋友的网站服务器就是这出了问题,磁盘使用已经100%,没有多余的空间可用了。

然后看看通过du -s -h *可以看看哪个目录下的文件占用较多,最后定位到Nginx的log文件有100多G,直接rm -rf access.log删掉吧。

但是这时候磁盘空间并没有释放,这是由于Nginx进程占用该文件的原因。

可以通过lsof access.log |grep deleted来验证。

lsof是一个列出当前系统打开文件的工具,可以用来查找删除的文件是被哪个进程在占用,然后做相应的处理,如将进程重启或者关闭。

这时处理起来比较简单了,直接重启一下Nginx。OK,硬盘可用空间增加,网站服务正常。

展开剩余53%