БообщСство RSS DEV

# πŸ› Как ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ `finally` съСдал 300 ΠœΠ‘ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ скрапинг

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ испытывало пСриодичСскиС сбои Docker ΠΈΠ·-Π·Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти Π² скрапСрС Π½Π° основС Puppeteer. Π‘ΠΊΡ€Π°ΠΏΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для сбора Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ пропускной способности, часто Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠ» ΠΈΠ· строя ΠΈΠ·-Π·Π° нСдоступных ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ ошибки. Π­Ρ‚ΠΈ сбои ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΊ появлСнию ΠΎΡΠΈΡ€ΠΎΡ‚Π΅Π²ΡˆΠΈΡ… процСссов Chromium, ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‰ΠΈΡ… Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ объСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС Azure. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ закрытия Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π² ΠΊΠΎΠ΄Π΅ скрапСра Π±Ρ‹Π»ΠΎ основной ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти. Π’ частности, функция `browser.close()` Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ послС Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Ρ… скрапингов. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ накоплСнию экзСмпляров Chromium ΠΈ ΠΈΡΡ‡Π΅Ρ€ΠΏΠ°Π½ΠΈΡŽ рСсурсов Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. РСшСниС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΎΡΡŒ Π² использовании Π±Π»ΠΎΠΊΠ° `try/catch/finally`, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ `browser.close()` всСгда выполнялся, ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° null Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ исправлСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ снизило использованиС памяти ΠΈ устранило ΠΎΡΠΈΡ€ΠΎΡ‚Π΅Π²ΡˆΠΈΠ΅ процСссы. Π“Π»Π°Π²Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всСгда Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ очистку Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Puppeteer с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `try/catch/finally`. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ скрапинга ΠΈ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° процСссами Chromium. НаконСц, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π½Π° null Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ очистки ΠΎΡΠΈΡ€ΠΎΡ‚Π΅Π²ΡˆΠΈΡ… процСссов Chromium ΠΈ освобоТдСния памяти.
favicon
dev.to
# πŸ› How a Missing `finally` Block Was Eating 300MB of RAM Per Failed Scrape
Create attached notes ...