|
Jakub Filak |
c83982 |
From 883d35109b55928d4c36d3cd6ee262d7cdc5bd4d Mon Sep 17 00:00:00 2001
|
|
Jakub Filak |
c83982 |
From: Jakub Filak <jfilak@redhat.com>
|
|
Jakub Filak |
c83982 |
Date: Wed, 15 Jul 2015 10:20:59 +0200
|
|
Jakub Filak |
c83982 |
Subject: [PATCH] abrtd: de-prioritize post-create event scripts
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
The crash processing should not make the computer unusable. It sometimes
|
|
Jakub Filak |
c83982 |
happens that the captured data causes abrt scripts to take an inadequate
|
|
Jakub Filak |
c83982 |
amount of resources and the computer becomes less responsive.
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
This patch increases the nice value of post-create processes by 10 (I took
|
|
Jakub Filak |
c83982 |
10 because it is the default value of command 'nice'), so those
|
|
Jakub Filak |
c83982 |
processes will be scheduled after the more valuable processes.
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
Related: rhbz#1236422
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
Signed-off-by: Jakub Filak <jfilak@redhat.com>
|
|
Jakub Filak |
c83982 |
---
|
|
Jakub Filak |
c83982 |
doc/abrtd.txt | 7 +++++++
|
|
Jakub Filak |
c83982 |
src/daemon/abrt-handle-event.c | 19 ++++++++++++++++++-
|
|
Jakub Filak |
c83982 |
src/daemon/abrt-server.c | 14 ++++++++------
|
|
Jakub Filak |
c83982 |
3 files changed, 33 insertions(+), 7 deletions(-)
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
diff --git a/doc/abrtd.txt b/doc/abrtd.txt
|
|
Jakub Filak |
c83982 |
index b129d3e..32d044b 100644
|
|
Jakub Filak |
c83982 |
--- a/doc/abrtd.txt
|
|
Jakub Filak |
c83982 |
+++ b/doc/abrtd.txt
|
|
Jakub Filak |
c83982 |
@@ -36,6 +36,13 @@ OPTIONS
|
|
Jakub Filak |
c83982 |
-p::
|
|
Jakub Filak |
c83982 |
Add program names to log.
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
+ENVIRONMENT
|
|
Jakub Filak |
c83982 |
+-----------
|
|
Jakub Filak |
c83982 |
+ABRT_EVENT_NICE::
|
|
Jakub Filak |
c83982 |
+ 'abrtd' runs its post-mortem processing with the nice value incremented by 10
|
|
Jakub Filak |
c83982 |
+ in order to not take too much resources and keep the computer responsive. If
|
|
Jakub Filak |
c83982 |
+ you want to adjust the increment value, use the ABRT_EVENT_NICE environment
|
|
Jakub Filak |
c83982 |
+ variable.
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
CAVEATS
|
|
Jakub Filak |
c83982 |
-------
|
|
Jakub Filak |
c83982 |
diff --git a/src/daemon/abrt-handle-event.c b/src/daemon/abrt-handle-event.c
|
|
Jakub Filak |
c83982 |
index 4a21aa4..fda21bd 100644
|
|
Jakub Filak |
c83982 |
--- a/src/daemon/abrt-handle-event.c
|
|
Jakub Filak |
c83982 |
+++ b/src/daemon/abrt-handle-event.c
|
|
Jakub Filak |
c83982 |
@@ -403,16 +403,18 @@ int main(int argc, char **argv)
|
|
Jakub Filak |
c83982 |
abrt_init(argv);
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
const char *program_usage_string = _(
|
|
Jakub Filak |
c83982 |
- "& [-v -i] -e|--event EVENT DIR..."
|
|
Jakub Filak |
c83982 |
+ "& [-v -i -n INCREMENT] -e|--event EVENT DIR..."
|
|
Jakub Filak |
c83982 |
);
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
char *event_name = NULL;
|
|
Jakub Filak |
c83982 |
int interactive = 0; /* must be _int_, OPT_BOOL expects that! */
|
|
Jakub Filak |
c83982 |
+ int nice_incr = 0;
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
struct options program_options[] = {
|
|
Jakub Filak |
c83982 |
OPT__VERBOSE(&g_verbose),
|
|
Jakub Filak |
c83982 |
OPT_STRING('e', "event" , &event_name, "EVENT", _("Run EVENT on DIR")),
|
|
Jakub Filak |
c83982 |
OPT_BOOL('i', "interactive" , &interactive, _("Communicate directly to the user")),
|
|
Jakub Filak |
c83982 |
+ OPT_INTEGER('n', "nice" , &nice_incr, _("Increment the nice value by INCREMENT")),
|
|
Jakub Filak |
c83982 |
OPT_END()
|
|
Jakub Filak |
c83982 |
};
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
@@ -423,6 +425,21 @@ int main(int argc, char **argv)
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
load_abrt_conf();
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
+ const char *const opt_env_nice = getenv("ABRT_EVENT_NICE");
|
|
Jakub Filak |
c83982 |
+ if (opt_env_nice != NULL && opt_env_nice[0] != '\0')
|
|
Jakub Filak |
c83982 |
+ {
|
|
Jakub Filak |
c83982 |
+ log_debug("Using ABRT_EVENT_NICE=%s to increment the nice value", opt_env_nice);
|
|
Jakub Filak |
c83982 |
+ nice_incr = xatoi(opt_env_nice);
|
|
Jakub Filak |
c83982 |
+ }
|
|
Jakub Filak |
c83982 |
+
|
|
Jakub Filak |
c83982 |
+ if (nice_incr != 0)
|
|
Jakub Filak |
c83982 |
+ {
|
|
Jakub Filak |
c83982 |
+ log_debug("Incrementing the nice value by %d", nice_incr);
|
|
Jakub Filak |
c83982 |
+ const int ret = nice(nice_incr);
|
|
Jakub Filak |
c83982 |
+ if (ret == -1)
|
|
Jakub Filak |
c83982 |
+ perror_msg_and_die("Failed to increment the nice value");
|
|
Jakub Filak |
c83982 |
+ }
|
|
Jakub Filak |
c83982 |
+
|
|
Jakub Filak |
c83982 |
bool post_create = (strcmp(event_name, "post-create") == 0);
|
|
Jakub Filak |
c83982 |
char *dump_dir_name = NULL;
|
|
Jakub Filak |
c83982 |
while (*argv)
|
|
Jakub Filak |
c83982 |
diff --git a/src/daemon/abrt-server.c b/src/daemon/abrt-server.c
|
|
Jakub Filak |
c83982 |
index d7556e2..9f177e9 100644
|
|
Jakub Filak |
c83982 |
--- a/src/daemon/abrt-server.c
|
|
Jakub Filak |
c83982 |
+++ b/src/daemon/abrt-server.c
|
|
Jakub Filak |
c83982 |
@@ -126,15 +126,17 @@ static int delete_path(const char *dump_dir_name)
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
static pid_t spawn_event_handler_child(const char *dump_dir_name, const char *event_name, int *fdp)
|
|
Jakub Filak |
c83982 |
{
|
|
Jakub Filak |
c83982 |
- char *args[7];
|
|
Jakub Filak |
c83982 |
+ char *args[9];
|
|
Jakub Filak |
c83982 |
args[0] = (char *) LIBEXEC_DIR"/abrt-handle-event";
|
|
Jakub Filak |
c83982 |
/* Do not forward ASK_* messages to parent*/
|
|
Jakub Filak |
c83982 |
args[1] = (char *) "-i";
|
|
Jakub Filak |
c83982 |
- args[2] = (char *) "-e";
|
|
Jakub Filak |
c83982 |
- args[3] = (char *) event_name;
|
|
Jakub Filak |
c83982 |
- args[4] = (char *) "--";
|
|
Jakub Filak |
c83982 |
- args[5] = (char *) dump_dir_name;
|
|
Jakub Filak |
c83982 |
- args[6] = NULL;
|
|
Jakub Filak |
c83982 |
+ args[2] = (char *) "--nice";
|
|
Jakub Filak |
c83982 |
+ args[3] = (char *) "10";
|
|
Jakub Filak |
c83982 |
+ args[4] = (char *) "-e";
|
|
Jakub Filak |
c83982 |
+ args[5] = (char *) event_name;
|
|
Jakub Filak |
c83982 |
+ args[6] = (char *) "--";
|
|
Jakub Filak |
c83982 |
+ args[7] = (char *) dump_dir_name;
|
|
Jakub Filak |
c83982 |
+ args[8] = NULL;
|
|
Jakub Filak |
c83982 |
|
|
Jakub Filak |
c83982 |
int pipeout[2];
|
|
Jakub Filak |
c83982 |
int flags = EXECFLG_INPUT_NUL | EXECFLG_OUTPUT | EXECFLG_QUIET | EXECFLG_ERR2OUT;
|
|
Jakub Filak |
c83982 |
--
|
|
Jakub Filak |
c83982 |
2.4.3
|
|
Jakub Filak |
c83982 |
|