本次批量處理是因為該項目本身經過多次外包,圖片儲存的到處都是,且沒有專門產生縮圖和統一尺寸的圖片,這次是在原有圖文混排的資料中提取圖片,儲存到指定目錄、裁剪尺寸並產生相應縮圖,並將結果儲存到資料庫。
在批配量序處理過程中,難免遇到程式執行時間過長,導致504錯誤等,調整伺服器配置其實不是很好的解決方案,畢竟對生產環境動刀子...
不過我比較懶,不想對一次提取的圖片再進行分頁請求處理^_^
順便說一句,最多的一次處理的資料提取的圖片達到3000張~
下面進入正題,我們的主要目的是儘可能延長程式執行時間,使該抓到的圖片都抓到,並處理完成寫到資料庫。
我們的環境是基於nginx的PHP5.6,首先代碼上要注意的,一個是放上set_time_limit(0),這避免去調整php.ini,當然有些基本的比如最大記憶體等等還是要調的,這裡不做介紹;另一個必須要設定curl的CURLOPT_TIMEOUT(我用的CURL抓遠程圖片)考慮到圖片都是在已知的多台伺服器上,逾時抓不到一定是有問題的索性放棄,如果不設定這個逾時,運行時會不停的給你報錯。
接下來就是伺服器了,首先是nginx的程式執行時間:
fastcgi_connect_timeout 900s;
fastcgi_send_timeout 900s;
fastcgi_read_timeout 900s;
這個配置在nginx.conf內,有則修改值,沒有追加上,時間上根據自己情況設定,調整後重啟服務。
MYSQL也會報逾時錯誤,修改my.ini添加或修改一下配置:
wait_timeout=2880000
interactive_timeout=2880000
max_allowed_packet=100M
調整後重啟mysql以便生效,經過上面的設定,基本掃清逾時報錯的各種情形,我的程式跑了2天3夜,採集和產生共計86G圖片。
再強調一下,這麼操作並不十分推薦,特別是生產環境下,會帶來很多問題,最重要的,完成批量任務後,恢複上述設定~