linux 僵尸进程
来源:互联网 发布:steam mac 中文游戏 编辑:程序博客网 时间:2024/06/13 23:47
- 产生背景
买的云主机,装的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/dockersystemctl start dockerdocker ps
接下来是不是可以删除之前的备份文件了
rm -rf /var/lib/docker
报错 device or resource busy
是不是有进程在写
lsof 没命令 擦
安装:空间不足。擦擦(删除一部分日志 和无用的东西再次安装)
发现文件 mount
mount/dev/dm-1 /var/lib/docker/image/devicemapper/layerdb/mounts/f83573b2a54b9a9ba190639d29b99edde878d7ed12320e5d542f57d3e5caded0 umountumount -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 空闲 IdleZ 僵死 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)
- Linux--进程--僵尸进程
- linux中的。"僵尸"进程
- 关于linux 僵尸进程
- 关于linux 僵尸进程
- 关于linux 僵尸进程
- linux僵尸进程
- Linux僵尸进程
- Linux中的僵尸进程
- linux 僵尸进程
- linux 僵尸进程
- linux中的僵尸进程
- Linux的僵尸进程
- Linux 僵尸进程
- LInux中查杀僵尸进程
- linux僵尸进程
- Linux中僵尸进程
- Linux僵尸进程
- Linux Zombie 僵尸进程
- Jfinal---模拟redis插件写一个连接多个memcahe的插件
- 扫码领红包 无需消费即可轻松提现 附教程
- Bootstrap 3.x 打印问题 打印无法显示背景、字体变黑
- HTML5移动开发的10大移动APP开发框架
- 结构体与byte数组转换/结构体内定长数组
- linux 僵尸进程
- NKOJ 2844 (APIO 2014)回文串(Manacher+后缀自动机+倍增/回文树)
- 从标准输入获取字符串并将换行符去掉-c语言实现
- Python checkio "Long Non Repeat"解决方案
- ffmpeg avfilter map解释
- 近七成金融平台下线“风险保证金”,“去刚兑”后未来怎么投
- JDBC调用存储过程
- Java中的4种安全沙箱机制之内置于Java虚拟机(及语言)的安全特性
- WebRTC学习之二:编译(Win10+VS2015)