網站首頁 編程語言 正文
問題描述:
目前遇到的問題是這樣的,爬蟲程序部署到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
相關推薦
- 2023-04-18 Android粒子線條效果實現過程與代碼_Android
- 2022-07-01 Python數據可視化繪圖實例詳解_python
- 2022-12-08 詳解C++引用變量時那些你不知道的東西_C 語言
- 2022-07-30 react組件的生命周期
- 2022-07-13 Collection和Collections有什么區別?
- 2022-04-22 npm WARN postcss-modules@4.2.2 requires a peer of
- 2022-09-30 LeetCode189輪轉數組python示例_python
- 2023-02-15 react源碼合成事件深入解析_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支