rlimits: Print more information when CPU/RT limits are exceeded
When a process is sent a SIGKILL because it exceeded CPU or RT limits, the cause may not be obvious in userspace -- daemonised processes just get killed, and even foreground process just see a 'Killed' message. The lack of any information on why this might be happening in logs can be confusing to users who are not aware of this mechanism. Add messages which dump the process name and tid in dmesg when a process exceeds its CPU or RT limits (soft and hard) in order to make it clearer to people debugging such issues. Signed-off-by: Arun Raghavan <arun@arunraghavan.net> Link: http://lkml.kernel.org/r/20170301145309.27214-1-arun@arunraghavan.net Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
4495c08e84
commit
e7ea7c9806
1 changed files with 7 additions and 2 deletions
|
@ -825,6 +825,8 @@ static void check_thread_timers(struct task_struct *tsk,
|
||||||
* At the hard limit, we just die.
|
* At the hard limit, we just die.
|
||||||
* No need to calculate anything else now.
|
* No need to calculate anything else now.
|
||||||
*/
|
*/
|
||||||
|
pr_info("CPU Watchdog Timeout (hard): %s[%d]\n",
|
||||||
|
tsk->comm, task_pid_nr(tsk));
|
||||||
__group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);
|
__group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -836,8 +838,7 @@ static void check_thread_timers(struct task_struct *tsk,
|
||||||
soft += USEC_PER_SEC;
|
soft += USEC_PER_SEC;
|
||||||
sig->rlim[RLIMIT_RTTIME].rlim_cur = soft;
|
sig->rlim[RLIMIT_RTTIME].rlim_cur = soft;
|
||||||
}
|
}
|
||||||
printk(KERN_INFO
|
pr_info("RT Watchdog Timeout (soft): %s[%d]\n",
|
||||||
"RT Watchdog Timeout: %s[%d]\n",
|
|
||||||
tsk->comm, task_pid_nr(tsk));
|
tsk->comm, task_pid_nr(tsk));
|
||||||
__group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
|
__group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
|
||||||
}
|
}
|
||||||
|
@ -935,6 +936,8 @@ static void check_process_timers(struct task_struct *tsk,
|
||||||
* At the hard limit, we just die.
|
* At the hard limit, we just die.
|
||||||
* No need to calculate anything else now.
|
* No need to calculate anything else now.
|
||||||
*/
|
*/
|
||||||
|
pr_info("RT Watchdog Timeout (hard): %s[%d]\n",
|
||||||
|
tsk->comm, task_pid_nr(tsk));
|
||||||
__group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);
|
__group_send_sig_info(SIGKILL, SEND_SIG_PRIV, tsk);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -942,6 +945,8 @@ static void check_process_timers(struct task_struct *tsk,
|
||||||
/*
|
/*
|
||||||
* At the soft limit, send a SIGXCPU every second.
|
* At the soft limit, send a SIGXCPU every second.
|
||||||
*/
|
*/
|
||||||
|
pr_info("CPU Watchdog Timeout (soft): %s[%d]\n",
|
||||||
|
tsk->comm, task_pid_nr(tsk));
|
||||||
__group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
|
__group_send_sig_info(SIGXCPU, SEND_SIG_PRIV, tsk);
|
||||||
if (soft < hard) {
|
if (soft < hard) {
|
||||||
soft++;
|
soft++;
|
||||||
|
|
Loading…
Reference in a new issue