过完年刚回来,同事反馈公司搭建的maven私服无法访问了。
故障定位
登录到服务器看了下,日志里面有磁盘空间满的提示(java.io.IOException: No space left on device)。nexus的管理页面已经无法正常登陆了,重启了nexus,还是无法登录。
这就有点尴尬了,手动清理吗?
来到nexus的数据目录看了下,数据基本上都在这里: /nexus-data/blobs/default/content
就是我们默认创建的blob
想了一会,不敢乱删,将其中一个大约2GB的vol 备份到到别的地方。
重启 nexus,可以正常启动了。
问题处理
虽然nexus可以启动了,能登录到管理界面了,也不是个事啊,目前blob总大小100GB,清理了2GB,勉强能用了,但是数据怎么清理呢?
我们用的nexus版本是 oss 3.22.0-02。
我在后台repository下面看到个 Cleanup Policies ,感觉是做清理的。点进去一通配置,完成。
然后呢? 配置好怎么清理呢? 找了半天,发现task下面多了个任务,大概描述就是用来跑你的repository配置的清理策略的。
运行这个task,跑了半天,完成了,发现磁盘空间占用还是没有减少。。。
这就尴尬了,然后各种研究各种倒腾,最后发现一篇资料这样介绍。
Schedule a Compact Blobstore task to run to remove items from blob storage that have previously been deleted. Many tasks which purge old content from the blobstore mark the content for deletion but do not clean up physical disk space. To remove content from disk you need to run Compact Blobstore.
大概意思是,你需要运行一个 compact blobstore的任务来清理之前被你删除的blob里面的数据,很多清理任务只是把blob里面的数据标记被删除了(逻辑删除?)。你还需要执行一个 Compact Blobstore task
来将这些数据占用的空间释放出来。
好吧,简单配置一个看看呗。
天呐,磁盘占用空间在一点一点减少,谢天谢地!
参考资料:
https://blog.sonatype.com/keeping-your-nexus-repositories-clean-just-got-easier