Python: hoog CPU verbruik Scrapy

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Storm90
  • Registratie: September 2008
  • Laatst online: 09-09 15:23
Onze server waar alle spiders op draaien, verbruikt behoorlijk wat CPU zodra de spiders uitgevoerd worden: 50% minimaal en vaak tegen de 100%.

Ik heb al diverse methodes geprobeerd om het CPU verbruik omlaag te brengen:
- sleep(0.1) toevoegen aan diverse Pipelines
- Pipelines uitschakelen
- gebruik maken van job persistance (mbv de JOBDIR parameter een map toewijzen waar tijdelijke data kan worden opgeslagen in plaats van deze te bewaren in het geheugen).
- max aantal taken per CPU omlaag brengen mbv hieronder getoonde settings.

scrapy.cfg:
Python:
1
2
3
[scrapyd]    
max_proc = 0    
max_proc_per_cpu = 2


Ze hebben geen van allen geholpen. Dit zijn de stats zodra ik een spider uitvoer:
Bash Session:
1
2
3
4
5
6
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 3221 scrapy    20   0  836724  75568   8432 R 40.5  7.4   1:04.31 python
 3231 scrapy    20   0  836724  75568   8432 S  1.0  7.4   0:01.40 python
 3234 scrapy    20   0  836724  75568   8432 S  1.0  7.4   0:01.42 python
 3235 scrapy    20   0  836724  75568   8432 S  1.0  7.4   0:01.44 python
 3228 scrapy    20   0  836724  75568   8432 S  0.7  7.4   0:01.43 python


Het is dus wel echt scrapy die het CPU opslurpt. Maar zelfs in de trackref functionaliteit van scrapy (http://doc.scrapy.org/en/...emory-leaks-with-trackref) zie ik geen vreemde dingen. Het aantal objecten loopt namelijk steeds weer wat terug, en niet aanzienlijk hoog op.

Iemand nog ideeën? Het valt me wel op wanneer ik sleep(0.1) toevoeg aan de Pipelines, ik geen korte pieken meer zie in de CPU grafieken. In plaats daarvan blijft het CPU verbruik op 50% hangen voor een aantal minuten. Omdat het proces nu natuurlijk langer duurt, maar het lijkt er dus op dat er toch iets niet helemaal lekker zit.

Zodra er meerdere spiders tegelijkertijd draaien, wil het CPU verbruik weleens oplopen tot 70%, of zelfs 100% cpu.

EDIT:
Met de variable `CONCURRENT_REQUESTS = 1` blijft die netjes op max 40%, als ik één spider uitvoer. Maar lager dan 40% CPU verbruik is me nog niet gelukt. Ik heb geprobeerd elke extension/pipeline/middleware uit te schakelen, maar dat hielp ook niets. Ik heb dit probleem even bij de makers gedropt, wellicht dat zij nog goede ideeën hebben.

[ Voor 17% gewijzigd door Storm90 op 21-05-2015 16:47 ]