背景
最近一直收到产品环境其中一台server的磁盘占用超过90%的警告,之前为了解决这个问题编写了一个压缩和删除历史log的脚本,正常情况来说应该不会再报这个警告,因为脚本是每天都在跑,所以每天增长的log的大小应该不至于占用很多的磁盘空间,但是实际情况却是每隔两三天就会收到一次警告,然后不得不手动的清理一些还没有被脚本压缩以及删除的log,从而释放一些空间,但是这不是长久之计,所以就详细的去查了这个问题。
解决
再次受到这个警告之后,我通过SSH连到了这台机器,然后通过df -h的命令查看了一下各个挂载磁盘的使用率如下图:
从图中可以看到可以看到 /dev/xvdb1这个磁盘被挂载在/alidata1/这个目录下,并且已经使用了34G(90%).
然后就要查看/alidata1下到底是哪个文件或者文件夹占用了这么多的磁盘空间,我们通过du -h --max-depth=1来查看,如下图:
我们可以看到 /alidata1下的所有文件及文件夹占用的空间是22G,和我们通过df -h查看出来的磁盘占用34G相差12G,这是为什么?这12G的空间到底是被谁占用了?
于是去网上查了一些资料,原来是因为在Linux上删除一个进程正在写入的文件的时候,虽然已经被我们删除了,但是只要进程还在,那个文件就不会真正被删除,只是被临时存放到系统的某个地方,有点类似于Windows的回收站。通过lsof可以查看没有被真正删除的文件。如下图
从图中我们可以看出有四个占用空间比较大的没有被真正删除的文件,这四个文件分别是809和808的java进程console的输出log。之前被手动删除,但是由于没有重启进程导致文件一直还在,占用了大量空间。在通过重启808和809的java进程之后,磁盘的警告恢复了,通过df和du查看的结果如下:
df -h
从新的结果中可以看到df查看的磁盘占用空间和du查看的文件中下文件的占用空间一致了。
总结
所以如果以后碰到一些不合理的一些磁盘占用情况,我们可以通过df和du来查看磁盘占用空间和实际的文件占用空间是否有差异,如果有差异通过lsof命令查看有哪些没有被真正删除的文件,确认是被哪个进程占用,通过重启进程的方式来释放这些空间。
方法一:首先打开任务管理器,单击磁盘占用率一栏进行排序,查看占用磁盘最高的应用。若占用率最高的始终是同一个三方程序,可尝试卸载。 注:开机时由于频繁读写磁盘,磁盘占用率会很高,等到开机完全后,磁盘占用率会逐渐降低。
方法二:同时按Win键+R键,输入regedit,点确定。
在注册表中找到HKEY_LOACAL_MACHINE,并展开它。
接着找到SOFTWARE-Microslft-Dfrg, BootOptinizeFunction,并找到OptimizeComplete,双击它。
在弹出的对话框中将OptimizeComplete的值为"no"
然后关闭注册表即可,重启后再查看磁盘占用率
方法三:是否在进行系统版本升级后,出现了卡顿或者磁盘占用率升高的情况,若是,且关闭家庭组,修改注册表等方法均无效,可退回到上一版本。若是安装某些Windows更新档之后出现卡顿情况,则可尝试删除最近安装的Windows更新。
方法四:若系统并未进行过升级,可在设置中检查系统更新,并更新系统尝试。
方法五:机台条件允许的情况下,建议更换或加装固态硬盘。
1、首先登录SQL Server实例,如下图所示。
2、接着右键单击某个数据库,选择报表下面的标准报表,第一个就是了。
3、接下来在右侧就出现了磁盘的使用情况图示了,如下图所示。
4、可以点击磁盘空间的加号展示列表数据,如下图所示。
5、另外顶部有刷新按钮可以刷新最新的数据。
6、最后还可以通过打印按钮将数据打印出来,如下图所示。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)