Linux磁盤空間異常爆滿的排查和處理方式
問題現象
在服務器運維過程中,我們時常會遇到這樣的情況,服務器磁盤空間使用率達到100%,業(yè)務出現異常。
問題定位
1.登錄服務器,通過df -Hl查看
[root@k8s-master1 ~]# df -Hl 文件系統 容量 已用 可用 已用% 掛載點 devtmpfs 8.4G 0 8.4G 0% /dev tmpfs 8.5G 0 8.5G 0% /dev/shm tmpfs 8.5G 774M 7.7G 10% /run tmpfs 8.5G 0 8.5G 0% /sys/fs/cgroup /dev/mapper/centos-root 136G 68G 68G 51% / /dev/sda1 1.1G 238M 827M 23% /boot
2.查找占用空間大的目錄或文件
笨方法:在根目錄下,通過du -hs命令,列出各目錄所占空間大小
[root@k8s-master1 /]# du -hs * 0 bin 194M boot 1012K core.580 0 dev 37M etc 21M home 7.7G kuboard-data 0 lib 0 lib64 0 media 0 mnt 135M opt du: 無法訪問"proc/21212/task/21212/fd/3": 沒有那個文件或目錄 du: 無法訪問"proc/21212/task/21212/fdinfo/3": 沒有那個文件或目錄 du: 無法訪問"proc/21212/fd/3": 沒有那個文件或目錄 du: 無法訪問"proc/21212/fdinfo/3": 沒有那個文件或目錄 0 proc 1.6G root 738M run 0 sbin 0 src 0 srv 0 sys 6.2M tmp 3.2G usr 51G var
相對高效一點的方法是通過du的-d參數,或--max-depth,設置查詢的目錄深度
du -h -d 2|grep [GT] |sort -nr du -h --max-depth=2|grep [GT] |sort -nr #通過這樣的方式,可以搜出以G或者T為單位的占用磁盤空間的大目錄,并排序 [root@k8s-master1 /]# du -h -d 1 / 194M /boot 0 /dev du: 無法訪問"/proc/24731/task/24731/fd/3": 沒有那個文件或目錄 du: 無法訪問"/proc/24731/task/24731/fdinfo/3": 沒有那個文件或目錄 du: 無法訪問"/proc/24731/fd/4": 沒有那個文件或目錄 du: 無法訪問"/proc/24731/fdinfo/4": 沒有那個文件或目錄 0 /proc 738M /run 0 /sys 37M /etc 1.6G /root 51G /var 6.2M /tmp 3.2G /usr 21M /home 0 /media 0 /mnt 135M /opt 0 /srv 0 /src 7.7G /kuboard-data 64G /
效率高的方法,使用find進行查找,比使用du效率要高
find / -type f -size +1G -exec du -h {} \; #查找文件大于10G的文件
遇到問題
操作刪除了一些備份文件和日志信息后,查看空間仍然不足,發(fā)現刪除的日志,空間并沒有釋放。
未釋放磁盤空間的原因:
在Linux或者Unix系統中,通過rm或者文件管理器刪除文件將會從文件系統的文件夾結構上解除鏈接(unlink),然而假設文件是被打開的(有一個進程正在使用),那么進程將仍然能夠讀取該文件,磁盤空間也一直被占用。而我刪除的是nginx的訪問日志文件,在刪除的時候該文件正在被使用。
處理辦法
[root@local ~]# lsof |grep deleted nginx 4399 root 38w REG 253,0 19304448 10835682 /var/nginx/logs/t-access.log (deleted) nginx 4399 root 39w REG 253,0 3502080 10835684 /var/nginx/logs/t-error.log (deleted) nginx 4401 nobody 38w REG 253,0 19304448 10835682 /var/nginx/logs/t-access.log (deleted) nginx 4401 nobody 39w REG 253,0 3502080 10835684 /var/nginx/logs/t-error.log (deleted)
從輸出的結果可以看到 /var/nginx/logs/t-access.log 和 t-error.log 還在被使用中,所以導致未釋放空間。
那么如何讓進程釋放呢?
- 方法1:直接 kill 掉相應的進程,或者停掉使用這個文件的應用,讓操作系統自己主動回收磁盤空間。
- 方法2:以后清理正在被讀寫的大日志文件時,直接使用 echo "" > xxx.log 命令,即直接將文件置空,并不影響服務的使用,文件大小也被控制下來,磁盤空間也釋放了
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
ubuntu20.04 LTS系統默認源sources.list文件的修改
這篇文章主要介紹了ubuntu20.04 LTS系統默認源sources.list文件的修改,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08Linux下監(jiān)視NVIDIA的GPU使用情況詳解
這篇文章主要介紹了Linux下監(jiān)視NVIDIA的GPU使用情況詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09解決CentOS 7升級Python到3.6.6后yum出錯問題總結
這篇文章主要介紹了CentOS 7升級Python到3.6.6后yum出錯問題解決總結,本文給大家介紹的非常詳細具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09linux輸入yum后提示: -bash: /usr/bin/yum: No such file or director
在本篇文章里小編給大家整理的是關于linux輸入yum后提示: -bash: /usr/bin/yum: No such file or directory的解決方法,有需要的朋友們參考下。2019-11-11