日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python項目運行導致內存越來越大的原因詳析_python

作者:成都—大數據開發工程師—楊洋 ? 更新時間: 2022-12-24 編程語言

問題描述:

目前遇到的問題是這樣的,爬蟲程序部署到K8S服務器上運行,但是會過幾個小時之后,程序就會被主動殺掉重啟,原因是因為內存過載,超過K8S設置的4G。

程序運行現象分析:

在線下進行程序測試時,未讓程序長時間運行(及4-5個小時),程序無異常則直接上測試環境測試,然后部署上線了運行了。

通過線下觀察,確實程序使用內存會因為時間而不斷增加

增長的速度雖然不是很快,但卻是在穩定增加,說明程序中存在內存使用未被釋放。

嘗試解決:

根據上網提供的方案,

import gc
gc.collect()

無效,該增加還是在增加,說明不是全局的內存使用未被釋放,內存回收正常。

通過斷點調試,發現,程序在使用代理的時候,內存才會增加

程序每次運行時會去獲取一個代理賦值到session的proxies中,程序使用的是多線程,則單位時間內會有大量的代理信息會賦值到session中。

通過注釋掉獲取代理的這一步,發現確實內存不在繼續增加。

原因分析:

Session對象存儲特定用戶會話所需的屬性及配置信息,,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。所以隨著時間的推移,session中記錄的proxies信息就會越來越多,最終導致內存使用過大,程序被殺。

解決方法:

不使用session進行請求,使用原生requests.get即可。

總結

原文鏈接:https://blog.csdn.net/weixin_43870646/article/details/118994421

欄目分類
最近更新