Bugzilla will be upgraded to version 5.0. The upgrade date is tentatively scheduled for 2 December 2018, pending final testing and feedback.
Bug 1434069 - [RFE] max_memory_per_executor support
[RFE] max_memory_per_executor support
Status: CLOSED ERRATA
Product: Red Hat Satellite 6
Classification: Red Hat
Component: Tasks Plugin (Show other bugs)
6.2.0
Unspecified Unspecified
medium Severity medium (vote)
: GA
: Unused
Assigned To: Ivan Necas
Nikhil Kathole
: FutureFeature, PrioBumpField, Triaged
: 1416241 1492768 (view as bug list)
Depends On:
Blocks: 1353215
  Show dependency treegraph
 
Reported: 2017-03-20 12:41 EDT by Mike McCune
Modified: 2018-06-01 10:24 EDT (History)
11 users (show)

See Also:
Fixed In Version: dynflow-0.8.30
Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2018-02-21 07:38:27 EST
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
screenrecord of real memory size(RSS) for dynflow_executor (314.71 KB, application/octet-stream)
2018-02-07 09:25 EST, Nikhil Kathole
no flags Details
screenrecord for EXECUTORS_COUNT=3 (432.60 KB, application/octet-stream)
2018-02-07 09:26 EST, Nikhil Kathole
no flags Details


External Trackers
Tracker ID Priority Status Summary Last Updated
Foreman Issue Tracker 17175 None None None 2017-03-20 12:41 EDT
Foreman Issue Tracker 20875 None None None 2017-09-07 10:43 EDT
Red Hat Product Errata RHSA-2018:0336 normal SHIPPED_LIVE Important: Satellite 6.3 security, bug fix, and enhancement update 2018-02-21 17:43:42 EST

  None (edit)
Description Mike McCune 2017-03-20 12:41:17 EDT
Given once Ruby allocates some memory, it doesn't give it back, bigger
set of larger actions can lead to quite big memory consumption that
persists and can accumulate over time. With this, it's hard to keep
memory consumption fully under control, especially in an environment
with other systems (passenger, pulp, candlepin, qpid). Since the
executors can terminate nicely without affecting the tasks itselves,
it should be pretty easy to extend it to watch the memory consumption.

The idea:

1. config options:
  max_memory_per_executor - the threshold for the memory size per executor
  min_executors_count -  minimal count executors (default 1)
  minimal_executor_age - the period it will check whether the memory consumption didn't grow (default 1h)

2. the executor will periodically check it's memory usage,
(http://stackoverflow.com/a/24423978/457560 seems to be a sane
approach for us)

3. if memory usage exceeds `max_memory_per_executor`, the executor is
older than `minimal_executor_age` (to prevent situation, where the
memory would grow too fast over the max_memory_per_executor, which
would mean we wouldn't do anything than restarting the executors
without getting anything done and the amount of current executors
would not go under `min_executors_count`, politely terminate executor

4. the polite termination should be able to hand over all the tasks to
the other executors and once everything is finalized on the executor, it would just exit

5. the daemon monitor would notice the executor getting closed and running a new executor

It would be configurable, turned off by default (for development) but we would configure
this in production, where we can rely on the monitor being present.
Comment 1 Mike McCune 2017-03-20 12:41:22 EDT
Created from redmine issue http://projects.theforeman.org/issues/17175
Comment 2 Mike McCune 2017-03-20 12:41:27 EDT
Upstream bug assigned to sshtein@redhat.com
Comment 4 pm-sat@redhat.com 2017-05-22 12:18:55 EDT
Moving this bug to POST for triage into Satellite 6 since the upstream issue http://projects.theforeman.org/issues/17175 has been resolved.
Comment 5 Ivan Necas 2017-08-16 08:15:28 EDT
Version Tested: Satellite-6.3 Snap 11

I've set this in /etc/sysconfig/foreman-tasks:

  EXECUTOR_MEMORY_LIMIT=400MB
  EXECUTOR_MEMORY_MONITOR_DELAY=60

Than I've followed https://bugzilla.redhat.com/show_bug.cgi?id=1406489#c19, while
watching

  watch 'ps aux | grep "\bdynflow_executor\b"'

The executor get though the 400MB threshold, it paused the task, but it didn't finished termination of dynflow process, this is due to the fact that the termination wait for some actions to finish without defining any timeouts, so it can hang forever.
Comment 6 pm-sat@redhat.com 2017-09-07 12:19:06 EDT
Upstream bug assigned to inecas@redhat.com
Comment 7 pm-sat@redhat.com 2017-09-07 12:19:10 EDT
Upstream bug assigned to inecas@redhat.com
Comment 8 Ivan Necas 2017-09-19 12:25:55 EDT
*** Bug 1492768 has been marked as a duplicate of this bug. ***
Comment 10 Justin Sherrill 2017-12-18 10:37:30 EST
*** Bug 1416241 has been marked as a duplicate of this bug. ***
Comment 11 Nikhil Kathole 2018-02-07 09:23:47 EST
VERIFIED

Version tested:
Satellite 6.3 snap 35

# rpm -qa | grep get_process_mem
tfm-rubygem-get_process_mem-0.2.1-1.el7sat.noarch

#rpm -q tfm-rubygem-foreman-tasks
tfm-rubygem-foreman-tasks-0.9.6.4-1.fm1_15.el7sat.noarch

# rpm -q tfm-rubygem-dynflow
tfm-rubygem-dynflow-0.8.34-1.fm1_15.el7sat.noarch

Steps:
1. Configured /etc/sysconfig/foreman-tasks:
  EXECUTOR_MEMORY_LIMIT=400MB
  EXECUTOR_MEMORY_MONITOR_DELAY=10

2. Run Remote Execution job on 350 hosts
3.  watch 'ps aux | grep "\bdynflow_executor\b"'

Found termination of dynflow process occured once memory usage reached to 400 MB (see attachment).

Also tried configuring :
   EXECUTOR_MEMORY_MONITOR_INTERVAL=15
   EXECUTORS_COUNT=3

Once memory usage exceeds limit for a executor, another executor started running. (see attachment 2 [details]).
Comment 12 Nikhil Kathole 2018-02-07 09:25 EST
Created attachment 1392687 [details]
screenrecord of real memory size(RSS) for dynflow_executor
Comment 13 Nikhil Kathole 2018-02-07 09:26 EST
Created attachment 1392688 [details]
screenrecord for EXECUTORS_COUNT=3
Comment 16 errata-xmlrpc 2018-02-21 07:38:27 EST
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHSA-2018:0336

Note You need to log in before you can comment on or make changes to this bug.