Linux中启动jenkins时报No space left on device错误的解决办法

45 篇文章 0 订阅
31 篇文章 0 订阅

环境

Linux服务器:centos5
jenkins:2.5

场景

今天jenkins无缘无故连接不上gitlab啦,百思不得奇解,因为我ssh配置没有问题。
无奈之下,只好重启,结果呢,就在出了问题:

Starting Jenkins daemon --user jenkins --pidfile /var/run/jenkins.pid /usr/java/jdk1.7.0_51/bin/java -Djava.awt.headless=true -DJENKINS_HOME=/home/jenkins/dataspace -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=7080 --ajp13Port=-1 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
Exception in thread "main" java.io.IOException:  No space left on device(设备上没有空间)

上面就是报的错误信息。

分析

上面的主要信息就是说设备上没有空间,也就是说磁盘满了。

查看磁盘命令:df -hT

这里写图片描述

上面可以看出,avail4.3M。这已经很小了,并且Use%占用100%,表示这个区的磁盘空间已经满了。
之后我接着去jenkins目录中查看,默认情况下,jenkinsjobs是在/var/lib/jenkins里面,由于这个目录空间很小,所以我换到home下,原则上,不应该出现这个所谓空间不够的情况,不过可以看出是内存被占用的所剩无几。

这里写图片描述

既然构建记录并没有占用很大空间,那么就对jenkins大目录查看大小:
这里写图片描述

这里我说明下
①workspace,这个目录我是用来存放项目代码(包括jar包)的,也就是jenkins拉的代码都在这里
②dataspace,这个目录是存放jenkins构建记录,日志,配置信息

之后我进入workspace目录再进行分析,到底哪个目录文件很大:
这里写图片描述

这我就惊讶啦,为什么一个项目会占用2个多G(我知道这个项目并没有这么大),
这种项目为什么占空间的就是lib目录了,毕竟里面全是jar包。我用计数器大致加了下,所有的目录加起来也没有2个G啊!所有呢,我就把大小2G以上的全部删除。
(因为jenkins重新构建的时候,会再次生成,所以没关系)


删除后,我接着重启,还是不行,依然报没有空间的错误。

已经网上查阅资料后,这段话是查看是网上的:

在Linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间,最后造成磁盘空间占用100%,整个系统无法正常运行。这种情况下,通过df和du命令查找的磁盘空间,两者是无法匹配的,可能df显示磁盘100%,而du查找目录的磁盘容量占用却很小。

接着我们查看jenkins占用的进程是否还有残留:
命令:

lsof -n | grep jenkins

结果显示:
这里写图片描述

我图片上的文字是:

满满的一个屏幕都显示不完,说明jenkins咱执行脚本时,包括定时任务;其开了很多进程,并且这些进程在关闭jenkins服务后,并没有自动关闭,这就导致其占用了很多资源。

接着关闭进程:

kill 14241 30485

之后再次重启jenkins就好了。

但是我发现,使用df -hT,查看时,还是Use% 100%

Filesystem           Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos01-lv_root
                     ext4    20G   19G   21M 100% /
tmpfs                tmpfs   32G     0   32G   0% /dev/shm
/dev/sda1            ext4   485M  121M  339M  27% /boot
/dev/mapper/vg_centos01-lv_home
                     ext4   985G  175G  760G  19% /home
/dev/sdb1            ext4   3.3T  202G  2.9T   7% /mongo
//192.168.0.138/files
                     cifs   453G  280G  173G  62% /file
//192.168.0.138/file cifs   453G  280G  173G  62% /file

唯一的变化就是Avail变成了21M

———————2017年8月2号————–修改——
询问公司里的高手后,才看懂了上图具体意思,当然也就是个基本的,
上面中的挂载点/目录Use%使用率是100%,总磁盘空间是20G,已经用了19G

虽然/目录下也有homemongofile目录,但是它们已经作为了单独的分区进行挂载,所以无论它们有多大都不会占用/目录下的空间。所以在清除/目录时,需要排除掉那些目录。这个时候你可以考虑/var/opt/usr目录。(最后,解决是清除了/usr/lib/hadoop-2.5.2/logs,这个日志占用5.6G,而且已经没人用啦)。

出现这个问题根本原因其实/目录空间当初设置的太小。而Jenkins虽然主目录已经换到/home中,但是默认的日志还是在/var中,所以它还是要往/目录中写数据。我也尝试过更改日志路径,但是不生效。

总结

问题虽然解决了,但是Use% 100%这一块依然不是很了解。
这么低的可用空间,感觉用不了多久,还会报空间不够问题。
jenkins空间不够时,未必会直接告诉你是空间不足,比如这次是提示gitlab连接不上(其实是空间不足啦)。

———————2017年8月2号————–修改——
解决这种问题(设备空间不足的问题)的步骤就是:
df -hT查看是哪个分区不足了,比如我的是/
②排除掉其他分区目录后,去删除无用的大文件(比如日志)。
③最好的解决办法其实扩容(我公司因为不想重启服务器,所以没有进行扩容)。

参考地址:
http://www.cnblogs.com/starRebel/p/5897450.html

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值