php cli 中的使用curl 記憶體溢位時的正確處理辦法
最近在用PHP CLI 開發了爬蟲 , 因為CURL可以同時請求多個資料,特別方便和快速 , 一天下來收集了 20多W條的有效URL,然後不停的下載各種文章 ,圖片 , 圖片半天下集了大概 2個G這樣子 。
原理是這樣子的,首先,通過首頁入口,取得所有各個欄目的有效入口的URL,記錄在MYSQL資料庫,做個標識,爬取過的標識為1,這樣,在PHP 中 通過 call_user_func 不停地爬取 , 就可以取得完整的資料了 。
在爬取過程中會碰到各種問題 ,其中最 難搞的 是 CURL每執行一次佔的記憶體會逐漸增大 , 到最後 記憶體溢位,系統崩潰 ,各種度娘後都沒有找到合適的,有的話通過修改php.ini中的記憶體設計,方法有點作用,執行的時間會長一點,但到最後還是會崩潰。不能從根本上解決問題,治標不治本 。可以通過 memory_get_usage 檢視記憶體的使用情況。
後來通過多次的測試 , 終於解決了 : 原理 是 計算 爬取的次數 ,當超過時用 exit ,退出執行 ,這時記憶體會清空 , 然後能過PHP 執行bat檔案 ,bat檔案裡面 是執行 爬蟲 的方法,相當於 重啟爬蟲 , 記得 在exit前 用system 函式 執行bat檔案,如果用 exec是沒效果 的,還有就是 bat檔案裡面 要 等待 幾秒的時間後再執行 。
關鍵程式碼如下:
bat檔案的程式碼
相關文章
- php記憶體溢位了怎麼辦?PHP記憶體溢位
- 關於 PHP 記憶體溢位的思考PHP記憶體溢位
- Java棧溢位|記憶體洩漏|記憶體溢位Java記憶體溢位
- 記憶體溢位記憶體溢位
- Executors使用不當引起的記憶體溢位記憶體溢位
- JVM 發生記憶體溢位的 8 種原因、及解決辦法JVM記憶體溢位
- Java記憶體溢位Java記憶體溢位
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- Windbg下使用dump分析記憶體溢位記憶體溢位
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- 阿里大佬講解Java記憶體溢位示例(堆溢位、棧溢位)阿里Java記憶體溢位
- 使用 pymysql 的時候如何正確的處理轉義字元MySql字元
- 匯出資料量大的報表記憶體溢位怎麼辦?記憶體溢位
- flink同步MySQL資料的時候出現記憶體溢位MySql記憶體溢位
- 簡單的記憶體“洩露”和“溢位”記憶體
- JavaScript之記憶體溢位和記憶體洩漏JavaScript記憶體溢位
- 記一次Orika使用不當導致的記憶體溢位記憶體溢位
- Python中的棧溢位及解決辦法Python
- JAVA記憶體區域與記憶體溢位異常Java記憶體溢位
- [Java基礎]記憶體洩漏和記憶體溢位Java記憶體溢位
- Java記憶體溢位OutOfMemoryError的產生與排查Java記憶體溢位Error
- 被記憶體溢位苦苦折磨的小測試!!!記憶體溢位
- return new物件造成溢位記憶體物件記憶體
- mybatis-plus getOne 記憶體溢位MyBatis記憶體溢位
- 蒙特卡羅方法:當丟失確定性時的處理辦法
- Recoil 中預設值的正確處理
- PHP Opcache 的正確使用PHPopcache
- Java記憶體區域與記憶體溢位異常 - 執行時資料區Java記憶體溢位
- jvm記憶體設定及記憶體溢位、解決方案JVM記憶體溢位
- 直播平臺搭建,Java 記憶體溢位的排查方法Java記憶體溢位
- 對jvm虛擬機器 記憶體溢位的思考JVM虛擬機記憶體溢位
- 記憶體和棧溢位問題定位記憶體
- Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)RedisError記憶體溢位
- Windows Tomcat 記憶體溢位解決方法WindowsTomcat記憶體溢位
- Android中使用web3j時出現記憶體溢位錯誤:OutOfMemoryErrorAndroidWeb記憶體溢位Error
- 記一次記憶體溢位導致的生產事故記憶體溢位