Hide Forgot
condor-qmf-7.6.1-0.1.el5 and probably all time src/condor_contrib/mgmt/qmf/daemons/job_server_main.cpp and probably the query_server - -- void Stop() { if (param_boolean("DUMP_STATE", false)) { Dump(); } consumer->Reset(); mirror->stop(); delete schedd_oid; schedd_oid = NULL; delete job_server; job_server = NULL; delete singleton; singleton = NULL; delete mirror; mirror = NULL; DC_Exit(0); } //------------------------------------------------------------- int main_shutdown_fast() { dprintf(D_ALWAYS, "main_shutdown_fast() called\n"); Stop(); DC_Exit(0); return TRUE; // to satisfy c++ } //------------------------------------------------------------- int main_shutdown_graceful() { dprintf(D_ALWAYS, "main_shutdown_graceful() called\n"); Stop(); DC_Exit(0); return TRUE; // to satisfy c++ } -- On shutdown, the daemon attempts to free all memory. Doing so is useful when running under a leak detector, but doing so can be very expensive (imagine 19GB job_server that is partially in swap). There should be a param to force the free()ing, defaulted to false.
"consumer->Reset();" is primary offender.
Workaround: send SIGKILL
Upstream on V7_6-branch commit 4dbb4724da668cfa2950ca0a57c147eae1038d00 Author: Matthew Farrellee <matt@redhat> Date: Wed Jun 15 16:12:20 2011 -0400 In cases of high memory usage, full free/delete of all memory on exit introduces unnecessary delays diff --git a/src/condor_contrib/mgmt/qmf/daemons/job_server_main.cpp b/src/condor_contrib/mgmt/qmf/daemons/job_server_main.cpp index 4605689..27ffbd9 100644 --- a/src/condor_contrib/mgmt/qmf/daemons/job_server_main.cpp +++ b/src/condor_contrib/mgmt/qmf/daemons/job_server_main.cpp @@ -276,7 +276,9 @@ void Stop() Dump(); } - consumer->Reset(); + if (param_boolea("CLEANUP_ON_EXIT", false)) { + consumer->Reset(); + } mirror->stop();