參考大神博客: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 觀察情況了