Failed to save registry store file, cause: No space left on device

问题

昨天晚上定时任务起不来了,用的是dubbo架构,依赖service

20:02:02.406 [main] INFO  com.alibaba.spring.beans.factory.annotation.ConfigurationBeanBindingRegistrar - The configuration bean definition [name : org.apache.dubbo.config.ApplicationConfig#0, content : Root bean: class [org.apache.dubbo.config.ApplicationConfig]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] has been registered.
20:02:02.407 [main] INFO  com.alibaba.spring.util.BeanRegistrar - The Infrastructure bean definition [Root bean: class [com.alibaba.spring.beans.factory.annotation.ConfigurationBeanBindingPostProcessor]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=nullwith name [configurationBeanBindingPostProcessor] has been registered.
20:02:02.407 [main] INFO  com.alibaba.spring.beans.factory.annotation.ConfigurationBeanBindingRegistrar - The configuration bean definition [name : org.apache.dubbo.config.RegistryConfig#0, content : Root bean: class [org.apache.dubbo.config.RegistryConfig]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] has been registered.
20:02:02.407 [main] INFO  com.alibaba.spring.beans.factory.annotation.ConfigurationBeanBindingRegistrar - The configuration bean definition [name : org.apache.dubbo.config.ConsumerConfig#0, content : Root bean: class [org.apache.dubbo.config.ConsumerConfig]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] has been registered.
20:02:03.945 [main] INFO  org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor - class org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor was destroying!

这是task任务最后输出的日志

没头没尾的也不知道啥情况,就尝试重启,发现起不来

20:39:13.826 [main] INFO com.alibaba.spring.util.BeanRegistrar - The Infrastructure bean definition [Root bean: class 
[com.alibaba.spring.beans.factory.annotation.ConfigurationBeanBindingPostProcessor]; scope=; abstract=false; lazyInit=null; 
autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; 
initMethodName=null; destroyMethodName=nullwith name [configurationBeanBindingPostProcessor] has been registered.
20:39:13.826 [main] INFO com.alibaba.spring.beans.factory.annotation.ConfigurationBeanBindingRegistrar - The configuration bean 
definition [name : org.apache.dubbo.config.RegistryConfig#0, content : Root bean: class [org.apache.dubbo.config.RegistryConfig]; 
scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; 
factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] has been registered.
20:39:13.826 [main] INFO com.alibaba.spring.beans.factory.annotation.ConfigurationBeanBindingRegistrar - The configuration bean 
definition [name : org.apache.dubbo.config.ConsumerConfig#0, content : Root bean: class 
[org.apache.dubbo.config.ConsumerConfig]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; 
autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; 
destroyMethodName=null] has been registered.
20:39:15.627 [main] INFO org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor - 
class org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor was destroying!

还是类似的错误,想想可能是service出现问题了,然后就用postman测试了下通畅的很

然后就把zk,service都重启了一遍,发现task还是起不来。。。离谱

dubbo-admin找到问题

过程很曲折,就不提了。
最终在dubbo-admin中找了原因

java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
2021-10-21 20:52:30,540 [DubboSaveRegistryCache-thread-1] WARN  com.alibaba.dubbo.registry.support.AbstractRegistry (AbstractRegistry.java:189) -  [DUBBO] Failed to save registry store file, cause: No space left on device, dubbo version: 2.6.2, current host: 172.17.0.1
java.io.IOException: No space left on device
	at java.io.FileOutputStream.writeBytes(Native Method)
	at java.io.FileOutputStream.write(FileOutputStream.java:326)
	at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
	at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:282)
	at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
	at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
	at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
	at java.io.BufferedWriter.write(BufferedWriter.java:230)
	at java.io.Writer.write(Writer.java:157)
	at java.util.Properties.store0(Properties.java:840)
	at java.util.Properties.store(Properties.java:818)
	at com.alibaba.dubbo.registry.support.AbstractRegistry.doSaveProperties(AbstractRegistry.java:170)
	at com.alibaba.dubbo.registry.support.AbstractRegistry$SaveProperties.run(AbstractRegistry.java:500)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at 

多的不摘了
重点是:** No space left on device**

解决启动

找到原因就好办了。

#查看磁盘空间占用情况
df -h 

然后切换到根目录

cd /

看看哪些占用空间比较大

find . -type f -size +800M

rm 删一下,注意删完后看下有没有真正清理 (明明删除文件了,空间没有被释放的情况)
因为有句柄的存在

在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink).然而假设文件是被
打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用。而我删除的是oracle的告警log文件
删除的时候文件应该正在被使用

首先获得一个已经被删除可是仍然被应用程序占用的文件列表,例如以下所看到的:

 lsof |grep deleted

怎样让进程释放呢?
方法是kill掉相应的进程,或者停掉使用这个文件的应用,让os自己主动回收磁盘空间
kill进程是通过截断proc文件系统中的文件能够强制要求系统回收分配给正在使用的的文件
再查看磁盘空间的使用情况,发现空间已经回收了
再启动定时任务,就可以了
我是主要清理了var/log/messages文件

附上清理方法

linux 文件介绍

1、/var/log/secure 记录登录系统存取数据的文件(例如:pop3,ssh,telnet,ftp等都会记录在此);
2、/ar/log/btmp 记录登录信息记录,被编码过,所以必须以lastb解析;

lastb | awk '{ print $3}' | sort | uniq -c | sort -nr | more

3、/var/log/message 几乎所有的开机系统发生的错误都会在此记录;
4、/var/log/boot.log 记录一些开机或者关机启动的一些服务显示的启动或者关闭的信息;
5、/var/log/maillog 记录邮件的存取和往来;
6、/var/log/cron 用来记录crontab(定时任务)这个服务的内容;
7、/var/log/lastlog 记录每个用户最后的登录信息;
8、/var/log/btmp 记录错误的登录尝试;
9、/var/log/dmesg 内核日志;
10、/var/log/yum.log 使用yum安装的软件包信息

Linux的文件系统比Windows的要优秀,不会产生碎片,对于长时间运行的服务器来说尤为重要,而且Linux系统本身也不会像Windows一样产生大量的垃圾文件。不知道这个说法有没有可信度!至少我们可以确定的是linux系统的文件系统是比较优秀的!

错误:

rm -f logfile

原因:
应用已经打开文件句柄,直接删除会造成:
1.应用无法正确释放日志文件和写入
2.显示磁盘空间未释放
正确方式:

cat /dev/null > logfile
#例:
cat /dev/null > /var/log/messages

将以下代码保存为.sh后缀的脚本文件,再配合crontab即可实现定时清理日志;

#!/bin/sh 
cat /dev/null > /var/log/secure 
cat /dev/null > /var/log/btmp 
cat /dev/null > /var/log/message 
cat /dev/null > /var/log/boot.log 
cat /dev/null > /var/log/maillog 
cat /dev/null > /var/log/cron
cat /dev/null > /var/log/lastlog 
cat /dev/null > /var/log/btmp 
cat /dev/null > /var/log/dmesg 
cat /dev/null > /var/log/yum.log
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值