ubuntu - Multiple workers on machine - Memory management ( Resque - Rails ) -
we've migrated our resque background workers ton of individual instances on heroku between 4 , ten m4.2xl (32gb mem) instances on ec2, cheaper , faster.
a few things i've noticed that: heroku instances using had 1gb of ram , ran out of memory. allocating 24 workers 1 machine, 1.3gb of memory per worker. however, because processing power on these machines greater, think os has trouble reclaiming memory fast enough , each worker ends of consuming more on average. of day system has 17-20gb memory free when memory intensive jobs run, 24 workers grab job @ same time , start growing. through few jobs system hasn't had time reap memory , crashes if there no intervention.
i've written daemon pause workers before crash , wait os free memory. reduce number of workers per machine overall or have half of them unsubscribe problematic queues, feel there must better way manage this. prefer making usage of more 20% of memory 99% of day.
the workers setup fork process when pick job queue. master-worker processes run services managed upstart. i'm aware there number of managers restart process when consumes amount of memory such god , monit. seems heavy handed solution end many jobs killed under normal circumstances.
is there better strategy can use higher utilization lowered risk of running errno::enomem?
system specs:
os : ubuntu 12.04 instance : m4.2xlarge memory : 32 gb
Comments
Post a Comment