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:
Ze hebben geen van allen geholpen. Dit zijn de stats zodra ik een spider uitvoer:
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.
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 ]