Lumen queue en beanstalkd enorme CPU load

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • DannyBevers
  • Registratie: November 2009
  • Laatst online: 20:56
Hee,

Weet niet of ik hier op de juiste locatie ben maar betreft het gaat om programmeren lijkt me dat de meest voor de hand liggende locatie.

Ben bezig met ontwikkeling van een applicatie die aan de front-end kant werkt op laravel en bouw er een API achter op lumen. Tot heden is alles goed gegaan en is de CPU nooit bepaald hoog gekomen (23%).

Heb daarbij veel geïnstalleerd op de server zoals, Neo4J (wordt gebruikt als database), elasticsearch (wordt gebruikt voor search queries icm neo4j). Daarnaast draai ik op PHP 7.0.13.

In lumen heb ik gebruik gemaakt van queues die de taken afhandelt icm beanstalk. Dit werkt ontzettend snel wat natuurlijk ook moet. Verder heb ik een VPS bij transip (PureSSD X4).

Alles blijft netjes draaien voordat ik bij het deel van lumen queue icm beanstalk kwam, hierin heb ik dan nu ook 4 queues aangemaakt die eigenlijk simpelweg de volgende dingen doen;

EmailSender - Verstuur e-mail via mailgun

NodeSender - Stuurt berichten door naar een node connectie

MessageQueue - Ontvangt bericht en stuurt door naar de API

TelegramSender - Stuurt bericht naar een gebruiker op telegram

Je zou zeggen dit moet nauwelijks servercapaciteit trekken gezien niet alle 4 de queues continue data hoeven te verwerken (tot heden). Heb de queues tevens draaien als daemon.

Op dit moment van kijken loopt de server tegen het limiet aan sinds een maand inmiddels alweer zonder dat het ook maar iets daalt. Denk hierbij dus aan een CPU load van 186%, dit komt volgens de server door de queues die draaien.

De queues draaien volgens de server op de volgende CPU percentage;

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
33% CPU
php /home/forge/dev2.monitorex.nl/artisan queue:work beanstalkd --sleep=0 --daemon --quiet --tries=5 --queue=NodeSender

30.6% CPU
php /home/forge/dev2.monitorex.nl/artisan queue:work beanstalkd --sleep=0 --daemon --quiet --tries=5 --queue=TelegramSender     

31.7% CPU
php /home/forge/dev2.monitorex.nl/artisan queue:work beanstalkd --sleep=0 --daemon --quiet --tries=5 --queue=EmailSender      
  
29.9% CPU
php /home/forge/dev2.monitorex.nl/artisan queue:work beanstalkd --sleep=0 --daemon --quiet --tries=5 --queue=P2000MessageQueue  

23.3% CPU
/usr/bin/beanstalkd -l 0.0.0.0 -p 11300

23% CPU
/usr/bin/memcached -m 64 -p 11211 -u memcache -l 0.0.0.0


Voor de mensen die wat dieper erop willen ingaan ik heb via forge (laravel) de sites ingesteld en daar de queues op aangemaakt wat bovenstaande commands aanmaakt. Heb taylor tevens als laatste optie ingezet om te vragen of hij iets weet wat hier gaande is.

Beanstalkd draait tevens ook op een behoorlijke CPU percentage maar vooruit dat mag naar mijn idee ook wel (denk ik) maar de queues op een percentage van gemiddeld 30% vind ik iets teveel van het goede.

--

Mijn vraag is dan ook of iemand hier ervaring mee heeft dat de CPU load zo hoog oploopt. Daarnaast weet iemand of ik anders een betere VPS of dergelijke moet aanschaffen om dit probleem te tackelen? Ik hoop dat ik na ruim een maand lang tot een mooie oplossing kan komen _/-\o_

Ben er namelijk wel een beetje op uitgekeken en de server word er nou niet echt betrouwbaar op als ik nog meer queues wil ontwikkelen.

_/-\o_

Beste antwoord (via DannyBevers op 02-12-2016 11:44)


  • naam
  • Registratie: Oktober 2007
  • Laatst online: 20-09 22:03
Dit word veroorzaakt doordat de sleep optie op 0 is ingesteld. Hierdoor is de worker continu beanstalk aan het vragen om nieuwe jobs, zonder even een moment rust te pakken wanneer er geen nieuwe jobs zijn. Dit veroorzaakt load op zowel beanstalkd, als op de workers zelf.
Ik zou de sleep optie weghalen uit je commands. Standaard pakt deze 3 seconden rust indien er geen nieuwe jobs zijn.

Laravel queue:work help:
code:
1
--sleep[=SLEEP]      Number of seconds to sleep when no job is available [default: "3"]

[ Voor 6% gewijzigd door naam op 02-12-2016 11:19 ]

Alle reacties


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • naam
  • Registratie: Oktober 2007
  • Laatst online: 20-09 22:03
Dit word veroorzaakt doordat de sleep optie op 0 is ingesteld. Hierdoor is de worker continu beanstalk aan het vragen om nieuwe jobs, zonder even een moment rust te pakken wanneer er geen nieuwe jobs zijn. Dit veroorzaakt load op zowel beanstalkd, als op de workers zelf.
Ik zou de sleep optie weghalen uit je commands. Standaard pakt deze 3 seconden rust indien er geen nieuwe jobs zijn.

Laravel queue:work help:
code:
1
--sleep[=SLEEP]      Number of seconds to sleep when no job is available [default: "3"]

[ Voor 6% gewijzigd door naam op 02-12-2016 11:19 ]


Acties:
  • 0 Henk 'm!

  • DannyBevers
  • Registratie: November 2009
  • Laatst online: 20:56
Wat een vooruitgang! Je bent voor mij de held van dit jaar!
Dacht zelf namelijk dat als ik hem op 0 seconden sleep zet dan is dat lekker snel en gaat alles er in een snelle vaart doorheen.

Heb alle queues op 1 seconden staan behalve email, die heb ik op 3 seconden staan.

De CPU is nu dan ook ineens voor deze queues een kleine 0.9% CPU. De server is dan ook van 191% CPU naar 17% CPU gegaan. Wat een rust geeft dit mij ineens!

Echt ontzettend bedankt voor deze tip, dit heeft echt geholpen na maanden zoeken en rondvragen. :D