记录一次Centos服务器tmp目录满的问题排查处理....
早上美编组突然反应账号登录不上,个别文件上传不上,本人非专业的服务器运维人员,第一反应是服务器磁盘空间满了,立即上去排查一圈,发现磁盘尚有剩余空间,所以进一步排查问题,现在讲相关过程记录下来备用。
问题发现:相关应用不能正常使用,系统有明显报错提示(如下):
bash: cannot create temp fileforhere-document: No space leftondevice
有过初步的运维知识,并经过度妈显示 这种情况应该是服务器tmp目录被占满的提示,因此开始排除问题:
一、查看服务器磁盘空间情况:
df -hl 命令显示 / 根目录40%空间已使用,尚有60%的空间未被使用,所以磁盘空间占满的情况给排除了(如果出现占用100%的问题,请自行度妈找解决问题办法,不在本篇讨论的范围之内;)
二、 找出问题原因所在并排除 (重点)
因为本人非专业的运维人员,所以并不知道接下来该怎么办(大佬可以无视),经过一番搜索及请教,得到一种提示: LINUX服务器也会因为小文件太多造成inode索引使用完,而报以上错误 ; 随即开始确认问题;
1、执行命令 df -i 得到如下图:
看到了 100%,感兴趣的人自行去百度,大致意思是LINUX写文件需要两个条件:01:磁盘有空间(文件大小占用容量);02:inode(类似于编号)之类的东东(存放文件数量),哪个有问题都会提示写入不了文件;病因找到,开始处理。
2、因为tmp目录一般在系统 / 根目录下,随即 cd / ,切换至系统根目录下执行如下命令
for i in /; doecho$i;find$i| wc -l; done
大致意思是从 / 根目录开始逐级排查目录下文件的数量多少,一般会得到如下的图示;
经过层层定位,本人定位到如下目录:/var/spool/postfix/maildrop ,显示文件数量 200多万个,着实是有点大,封顶多少我也不知道,接下来就是删除文件了呗,执行如下命令:
ls | xargs rm -rf;
经过约10分钟左右的等待,命令执行完毕,通知美编组测试,一切恢复正常,特撰文记录。
三、为什么会出现这种情况,后续处理
/var/spool/postfix/maildrop 这个目录好像是存放了类似于cron执行后邮件通知的内容信息文件,继续上网查资料,发现是crontab 每次执行任务后会发送邮件,接受者是在他的配置文件 “/etc/crontab” 通过 MAILTO=root’ 来设置的,默认是root,如果执行输出没有十分必要要用邮件发送的话,可以修改此处。
随修改如下:
执行命令 vi /etc/crontab;
将‘MAILTO=root’替换成‘MAILTO="",然后service crond restart即可。
===================================与本篇内容无关==================================
使用命令du -h –max-depth=1 / 查看/ 根路径下文件的大小
du -sh / 查看哪个目录最大,一步一步的查找大文件
使用du -h --max-depth=1查找最大的文件
首先必须使用 ssh 工具连接服务器,在 windows 环境下推荐使用: SecureCRT
使用下面命令进行登录:
链接之后会提示输入密码,密码不可见,使用键盘输入完之后直接按回车。
如上图,存放项目的磁盘空间占用率为 40% ,项目存放路径为 /home
并不是所有的总空间都可以存放文件,所以已使用空间未达到484G 的之前占用率将会达到100%,观察空间是否爆满,主要以占用率为参考。
使用命令到达项目所在目录:
接着,使用命令到达项目备份目录:
之后,使用命令查看备份文件:
使用命令查看备份文件大小:
可以看到备份文件有大和小两种, 删除的时候请留下时间最近一次大备份
使用以下命令进行文件删除:
这个命令非常之危险,没有任何挽救的余地
一般情况,删除成功没有任何提示(没有消息就是好消息),偶尔会看到系统接收到一条新消息的提示,这个对删除操作没有影响。
之后,我们可以重复上述操作,直到留下 时间最近一次大备份 。
最后,可以用上面提到的命令确认磁盘空间。
END
遇到这种情况通常有两种办法:
一清理下你的磁盘文件比如说你可以通过安装电脑管家360来清理或者是直接利用系统自带的磁盘清理工具或者是手动把该分区下没用的文件删除掉节省出来一部分空间
二升级更高配置如果你是用的虚拟主机或者云主机大多是支持中途升级的而且不需要转移数据即要直接升级也非常方便需要找你的服务商了解下
海腾数据杨闯为你解答希望对你有帮助
服务器提供服务是肯定的,情况有几种:
1、磁盘没有数据需继续存储,服务器正常的服务,磁盘进行读操作不做写操作。
2、磁盘需要继续进行存储数据,也就是需要空间,那么就要根据之前服务设置的磁盘模式(有不能继续进行写操作、自动覆盖最早数据等)来分析。如果自动覆盖那就不用担心,读写都正常。
3、如果磁盘不能自动进行清理和覆盖,那么需要尽快添加新的磁盘空间,否者容易造成调用数据慢和数据丢失的可能。
服务器满了,有以下原因,逐步检查就好:
1、如果是大文件占用了,那么查询大于某个值的文件的方法:
find / -size +100c -print
这是从根盘开始查找大于100字节的文件(至于字节数你当然可以自己设置)
你可以用
find / -size +100c -exec ls -l {}\;
来列出文件属性。
2、如果只是因为有些应用生成的日志文件较多,长时间没有清理后占用了,这种情况最明显的标志为系统空间使用量逐步递增,每天的增量基本相差不大。那么最快捷的方式莫过于询问应用厂商要到日志存放目录后进行清理。如果找不到厂商,那只好自己动手咯,写个脚本查:
#!/bin/ksh
#####用du命令输出所有目录所占的磁盘空间大小,以G为单位#########
du -h >fs_dulog
######判断各层目录大小,查到占用量大的目录######
cat fs_dulog|while read LINE FS_USED
do
if [ $LINE -ge 10 ]
then
echo $FS_USED >>resultlog
else
exit
fi
done
####查看运行结果#######
more resultlog
这样你就能看到占用量比较大的目录,从而有针对性的到相应目录下检查,看到底是什么东西在占用硬盘空间了。(if [ $LINE -ge 10 ] ,这里是判断超过10G的目录,你可以修改)
3、因为人为的误操作,导致了某些进程在没有执行完成的时候被kill掉了,但是缓存中的程序没有释放,仍然在运行,这会产生一些临时文件占用大量的磁盘空间资源,这种现象的特点是爆发式的增长,在很短时间内就将磁盘空间占满。解决的方法:
i、如果是因为父进程被杀除,子进程还运行导致,那么最简单,kill子进程,就会释放。
ii、如果能用ipcs确认是哪个用户的进程,那么也不困难,顺着使用ipcrm就行(这个就不一一例举了,有了命令查使用方法还是很方便的)
iii、执行进程的用户是比较关键的用户如:root用户、有实例的oracle用户、在线的生产用户等。那么建议在确认是因为共享缓存的原因导致的问题后重启服务器。
4、你已经删除了一些占用量大的文件,或者在根盘下做du -h发现占用量远远的小于130G,df的结果仍然是100%的使用率。那么基本肯定你碰到了linux的一个bug,直接重启就能解决。(当然了也不一定是bug,我碰到过那种程序在写一个日志,但是删除日志后空间不释放的问题。这个是linux本身的机制引起的,只需要停止相关的程序空间就会释放的)
0条评论