Linux下阻塞进程的处理方法(linux阻塞进程)

随着人们对Linux的接受,越来越多的用户在使用Linux的过程中,遇到了内核一些问题,比如有时候进程会变为阻塞,然后进程性能就会受到一定影响,下面就来介绍Linux下处理阻塞进程的方法。

首先要确定进程是不是已经死在一个阻塞状态。我们可以使用ps或者top命令查看一下,看看状态是不是D(表示阻塞状态)的。

[root@zhangyz /]# ps -ef |grep Tomcat
root 3600 1667 0 14:31 ? 00:00:00 /opt/jdk1.7.0_55/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/opt/apache-tomcat-8.0.20/conf/logging.properties -Djava.endorsed.dirs=/opt/apache-tomcat-8.0.20/endorsed -classpath /opt/apache-tomcat-8.0.20/bin/bootstrap.jar:/opt/apache-tomcat-8.0.20/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-8.0.20 -Dcatalina.home=/opt/apache-tomcat-8.0.20 -Djava.io.tmpdir=/opt/apache-tomcat-8.0.20/temp org.apache.catalina.startup.Bootstrap start

从上面可以看出,这个Tomcat进程状态是D,这就表明它已经被内核放入了内核队列。

如果进程可以被 kill 掉,那么可以利用kill 命令来终止一个进程,也可以使用下面的命令来强制 kill 掉一个进程:

[root@zhangyz /]# kill -9  3600

如果无法用 kill -9 强制终止进程,可以采用 strace 运行 strace -p [进程ID],可以查看它当前调用的那个系统调用出现什么问题,或者用gdb运行-attach [进程ID] 进行调试,看是什么函数没有正确返回,或者卡在哪里。

有时进程被阻塞不是因为任何代码问题,而可能是另外一个进程造成的资源冲突,比如文件句柄资源等,我们可以尝试增加该资源的可用性,就可以解决。

然后我们可以观察一下与当前内核版本相关的文章,看看是否存在已知的 BUG,如果是的话,可以通过升级内核来解决。

最后,如果以上方法都没有结果,建议及时联系 Kernel.org 的社区,解决问题或求助。

总而言之,处理Linux下阻塞进程,我们可以通过以上几步来解决,但要保证这些操作,一定要保持系统的平稳性和安全性,以免发生意想不到的后果。


数据运维技术 » Linux下阻塞进程的处理方法(linux阻塞进程)