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檔案的程式碼
相關文章
- phpexcel 處理大量資料時記憶體溢位PHPExcel記憶體溢位
- eclipse啟動時記憶體溢位的解決辦法Eclipse記憶體溢位
- php記憶體溢位了怎麼辦?PHP記憶體溢位
- 關於 PHP 記憶體溢位的思考PHP記憶體溢位
- 傳說中的記憶體溢位記憶體溢位
- 誰動了我的記憶體之 PHP 記憶體溢位PHP記憶體溢位
- 誰動了我的記憶體之PHP記憶體溢位PHP記憶體溢位
- 記憶體溢位的分析記憶體溢位
- Java棧溢位|記憶體洩漏|記憶體溢位Java記憶體溢位
- 解決記憶體溢位九法記憶體溢位
- 【轉】java中的記憶體溢位和記憶體洩漏Java記憶體溢位
- 記憶體溢位記憶體溢位
- JVM 發生記憶體溢位的 8 種原因、及解決辦法JVM記憶體溢位
- 記憶體溢位的問題記憶體溢位
- Executors使用不當引起的記憶體溢位記憶體溢位
- 影像處理或其他多媒體處理中的值溢位處理
- Java記憶體溢位Java記憶體溢位
- JBOSS記憶體溢位記憶體溢位
- 記憶體溢位:native溢位 和 上層溢位記憶體溢位
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- 記憶體洩漏和記憶體溢位記憶體溢位
- Windbg下使用dump分析記憶體溢位記憶體溢位
- WebLogic: 記憶體溢位Web記憶體溢位
- java 程式記憶體溢位Java記憶體溢位
- 記憶體溢位問題記憶體溢位
- SD圖片處理 記憶體瘋長的解決辦法記憶體
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- J2EE專案記憶體溢位解決辦法總結記憶體溢位
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- 正確釋放Vector的記憶體記憶體
- 阿里大佬講解Java記憶體溢位示例(堆溢位、棧溢位)阿里Java記憶體溢位
- 使用 pymysql 的時候如何正確的處理轉義字元MySql字元
- 匯出資料量大的報表記憶體溢位怎麼辦?記憶體溢位
- Android記憶體溢位分析Android記憶體溢位
- Java記憶體溢位情況Java記憶體溢位
- Flume記憶體溢位錯誤記憶體溢位
- JNI練習-記憶體溢位記憶體溢位