- 产生背景
买的云主机,装的docker,docker启动一段时间后,同事反映不能写入了,结果发现,根路径100% ,新手原因,他启动的时候没有映射本地路径,docker默认存储位置是/var/lib/docker 下,在镜像中写入的时候导致根目录沾满,于是让他听掉对应的进程,发现已经停不了了,无赖之下直接停止了docker 服务,发现有个镜像文件已无法识别。
再次启动systemctl start docker 无法启动 ,通过journalctl -u docker.service 查看发现 是存储盘已满的原因,还以为停止会释放部分空间,再次启动通过docker 命令删除对应的image ,发现行不通
2.解决
备份/var/lib/docker,到存储盘下 建立软连指向/var/lib/docker
并启动服务,后发现显示正常,之前的images 也可以正常启动
ln -s /data/docker-volume /var/lib/docker
systemctl start docker
docker ps
接下来是不是可以删除之前的备份文件了
rm -rf /var/lib/docker
报错 device or resource busy
是不是有进程在写
lsof 没命令 擦
安装:空间不足。擦擦(删除一部分日志 和无用的东西再次安装)
发现文件 mount
mount
/dev/dm-1 /var/lib/docker/image/devicemapper/layerdb/mounts/f83573b2a54b9a9ba190639d29b99edde878d7ed12320e5d542f57d3e5caded0
umount
umount -v /dev/dm-1
发现还是无法删除
mount发现
/var/lib/docker整路径被挂载了
继续umount
问题来了 文件不见 空间没释放
df -h
/dev/vda1 20G 20G 20k 100% /
lsof |grep deleted
dockerd 9639 10884 root 11uW REG 253,1 32768 34680840 /var/lib/docker.bak/volumes/metadata.db (deleted)
dockerd 9639 10884 root 18uW REG 253,1 16384 190524 /var/lib/docker.bak/builder/fscache.db (deleted)
备份的文件还在删除中,一般做法 kill 点对于进程就可以了,空间得等释放
kill -9 9639
ps -ef |grep dockerd
root 12440 9831 0 14:31 pts/3 00:00:00 grep --color=auto dockerd
what??? 开始怀疑了
ps -auxH |grep dockerd
root 9639 0.0 0.0 0 0 ? Zsl Nov27 2:06 [dockerd] <defunct>
root 9639 0.0 0.2 1390188 43768 ? Dsl Nov27 2:07 [dockerd] <defunct>
root 12442 0.0 0.0 112668 976 pts/3 S+ 14:32 0:00 grep --color=auto dockerd
Zsl 是神马? 查看ps 命令可以看出 僵死,子进程,多线,这玩意儿试僵尸进程
USER 用户名
UID 用户ID(User ID)
PID 进程ID(Process ID)
PPID 父进程的进程ID(Parent Process id)
SID 会话ID(Session id)
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
VSZ 进程所使用的虚存的大小(Virtual Size)
RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
TTY 与进程关联的终端(tty)
STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)
R 运行 Runnable (on run queue) 正在运行或在运行队列中等待。
S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号。
I 空闲 Idle
Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
T 终止 Terminate 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
P 等待交换页
W 无驻留页 has no resident pages 没有足够的记忆体分页可分配。
X 死掉的进程
< 高优先级进程 高优先序的进程
N 低优先 级进程 低优先序的进程
L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
+ 位于后台的进程组
START 进程启动时间和日期
TIME 进程使用的总cpu时间
COMMAND 正在执行的命令行命令
NI 优先级(Nice)
PRI 进程优先级编号(Priority)
WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
FLAGS 与进程相关的数字标识
什么是僵尸进程:
在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程. 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程。可以通过top 或者ps命令都可以进行查看
如何查杀呢:
主要是找到对应的父进程 杀死他,父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
或者
ps -e -o ppid,stat | grep Z | cut -d "" -f2
可以使用:
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'| xargs kill -9
或者
kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`
或者直接杀死
ps -ef | grep docker | grep -v grep | awk '{print "kill -18 " $3}'
-A 参数列出所有进程
-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数
HUP(1)是让进程挂起,睡眠;
kill (9)六亲不认的杀掉
可我的运气比较背
父进程是1 init 进程,怎么办呢
最好重启了。。。。
linux signals
Signal Name Number Description
SIGHUP 1 Hangup (POSIX)
SIGINT 2 Terminal interrupt (ANSI)
SIGQUIT 3 Terminal quit (POSIX)
SIGILL 4 Illegal instruction (ANSI)
SIGTRAP 5 Trace trap (POSIX)
SIGIOT 6 IOT Trap (4.2 BSD)
SIGBUS 7 BUS error (4.2 BSD)
SIGFPE 8 Floating point exception (ANSI)
SIGKILL 9 Kill(can’t be caught or ignored) (POSIX)
SIGUSR1 10 User defined signal 1 (POSIX)
SIGSEGV 11 Invalid memory segment access (ANSI)
SIGUSR2 12 User defined signal 2 (POSIX)
SIGPIPE 13 Write on a pipe with no reader, Broken pipe (POSIX)
SIGALRM 14 Alarm clock (POSIX)
SIGTERM 15 Termination (ANSI)
SIGSTKFLT 16 Stack fault
SIGCHLD 17 Child process has stopped or exited, changed (POSIX)
SIGCONT 18 Continue executing, if stopped (POSIX)
SIGSTOP 19 Stop executing(can’t be caught or ignored) (POSIX)
SIGTSTP 20 Terminal stop signal (POSIX)
SIGTTIN 21 Background process trying to read, from TTY (POSIX)
SIGTTOU 22 Background process trying to write, to TTY (POSIX)
SIGURG 23 Urgent condition on socket (4.2 BSD)
SIGXCPU 24 CPU limit exceeded (4.2 BSD)
SIGXFSZ 25 File size limit exceeded (4.2 BSD)
SIGVTALRM 26 Virtual alarm clock (4.2 BSD)
SIGPROF 27 Profiling alarm clock (4.2 BSD)
SIGWINCH 28 Window size change (4.3 BSD, Sun)
SIGIO 29 I/O now possible (4.2 BSD)
SIGPWR 30 Power failure restart (System V)