2

有一个应用程序(用 C++ 编写)在 Linux 中在后台运行了几天,如果我向这个应用程序发送一些信号(使用kill -MYSIG),要求应用程序执行一些定义的操作,这可能会使我的系统无法响应正常。没有正常响应是指在我向应用程序发送此信号后,系统 shell ( bash) 无法响应任何 Linux 命令 ( ls,ps,top...),就像系统关闭时一样。如果我等待几分钟,系统会再次返回。

我想知道是什么导致系统出现故障或无法正常响应?是应用程序使用了过多的 CPU 或内存吗?那么系统是如何恢复的呢?

4

2 回答 2

1

Linux调度程序有一个进程不响应信号(TASK_UNINTERRUPTIBLE状态)的状态,发送到这样一个进程的信号一直排队,直到进程离开不可中断状态,我想这就是你无法杀死/发送信号的原因您的应用程序。如果是这种情况,请使用ps -A并查看您的应用程序的状态是否为 D。如果是,那么您的应用程序/进程处于 TASK_UNINTERRUPTIBLE 中。

可能 由于可用 RAM 不足,系统没有响应。用于top查看您的应用程序消耗了多少 RAM/资源,请参阅%CPU%MEM列。您还可以使用系统监控工具(例如:Gkrell)查看系统范围内的资源使用情况。您可以降低应用程序的优先级以减少其资源消耗。

如果您的应用程序有读/写/选择套接字调用,您应该使用 strace/coredump 来查看您的应用程序在哪里花费了大部分时间。这通常会发生如果选择处于紧密循环中或您的应用程序执行了阻塞系统调用就像在套接字上读/写

于 2013-01-31T09:22:39.080 回答
0

您可以尝试为您的应用设置较低的优先级,除非它已经是最低优先级并且仍然会导致问题。

在 Linux 中降低优先级

于 2013-01-31T06:12:09.223 回答