遭遇Linux进程状态D
在一台flashcache的机器上面跑stap脚本
global some_count
probe process(@1).function("*")
{
some_count[tid()] = backtrace()
}function print_top()
{
foreach (tid+ in some_count)
{
print_stack(some_count[tid])
}
}probe timer.s(5)
{
print_top()
printf("—————————————————-\n")
}
跑了这个脚本,跑了一会就ctrl+c abort掉,但后台还是有一个D进程的程序,用了好几次kill -9也杀不掉
1 15466 15252 14863 ? -1 D 0 0:00 /usr/libexec/systemtap/stapio -u /tmp/stapzHoiGc/stap_b2dc831605d82ca90db5b550e7dfd16a_24607.ko
在Linux里面,进程状态分为task_running,task_interruptiable,task_uninterruptiable,_task_traced _task_stopped
之前一直对task_uninterruptiable不是很理解,这次亲身经历后,对它的认识更加深入。
进程状态为D的进程,一直滞留在CPU run_queue里面,搞得我的其他进程都不能正常运行,尝试了kill –9 ,没办法杀掉。最后只能reboot解决
之所以命名为D,往往是因为I/O资源得不到满足而引发等待。
我们的备库依赖nas服务器来作为备份盘,今年遇到过好几次因为nas的问题,导致mysql的监控一直告警(监控程序需要连接到MySQL,但由于备份脚本因为在写nas的时候,nas在中途卸载掉了,导致脚本一直在等待nas就绪,必须得重新挂载nas才能解决)
你们是直接将nas mount到本地目录来备份?
现在是的,去年也做了基于hdfs来放备份文件的方式。