一次遇到too many open files的解決詳情


參考大神博客:Too many open files的四種解決辦法

遇到報錯信息:too many open files

統計各進程打開句柄數:lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr
統計各用戶打開句柄數:lsof -n|awk '{print $3}'|sort|uniq -c|sort -nr
統計各命令打開句柄數:lsof -n|awk '{print $1}'|sort|uniq -c|sort -nr
#第一列是打開的句柄數,第二列是進程ID。

ps -e | grep docker
18239 ?        19-04:29:02 dockerd

lsof -p 18239|wc -l	#查看打開的文件數
65570

# 文件句柄數設置的是65536現在已經65570了
# 由於是k8s機器,大量占用的只有docker了

cat /proc/sys/fs/file-max      #文件系統最大可打開文件數如果設置值太小,修改文件/etc/sysctl.conf的變量到合適的值fs.file-max = 8192

docker system df      #查看空間使用情況
docker system df -v   #命令可以進一步查看空間占用細節

docker system prune   #可對空間進行自動清理。也可以清理未釋放的文件數
      #該命令所清理的對象如下:
            #已停止的容器
            #未被任何容器使用的卷
            #未被任何容器所關聯的網絡
            #所有懸空的鏡像
docker system prune      #后面可以加額外的參數,如:
docker system prune -a : #一並清除所有未被使用的鏡像和懸空鏡像。
docker system prune -f : #用以強制刪除,不提示信息。

docker image prune #刪除懸空的鏡像。
docker container prune #刪除無用的容器。
      #--默認情況下docker container prune 命令會清理掉所有處於stopped狀態的容器
      #--如果不想那么殘忍統統都刪掉,也可以使用--filter標志來篩選出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24內創建的除外:
      #-- docker container prune --filter "until=24h"  
docker volume prune #刪除無用的卷。
docker network prune #刪除無用的網絡

#對於懸空鏡像和未使用鏡像可以使用手動進行個別刪除:
#1、刪除所有懸空鏡像,不刪除未使用鏡像:
docker rmi $(docker images -f "dangling=true" -q)
#2、刪除所有未使用鏡像和懸空鏡像
docker rmi $(docker images -q)
#3、清理卷
#如果卷占用空間過高,可以清除一些不使用的卷,包括一些未被任何容器調用的卷(-v 詳細信息中若顯示 LINKS = 0,則是未被調用):
#刪除所有未被容器引用的卷:
docker volume rm $(docker volume ls -qf dangling=true)
#4、容器清理
#如果發現是容器占用過高的空間,可以手動刪除一些:
#刪除所有已退出的容器:
docker rm -v $(docker ps -aq -f status=exited)
#刪除所有狀態為dead的容器
docker rm -v $(docker ps -aq -f status=dead)


####然后就重啟docker 觀察情況了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM