redis連線成功操作無反應,nginx 504的另一個原因

jifei發表於2015-01-07

遇到的2個問題

問題1: redis-server啟動後,redis-client連線成功,set時無反應,檢視redis-server程式存在。
問題2: nginx,php-fpm,訪問html頁面正常,訪問php頁面每次出現504錯誤,修改配置檔案調大響應時間均無效。

一些嘗試

這兩個問題不是同一天遇到的,究根結底原因是一樣的。奇葩的是nginx之前執行的好好的,突然就504了怎麼改也回不來了,修改配置檔案,檢視錯誤日誌,重啟,重灌軟體,這些嘗試後都沒有效果。 google有說把php-fpm的listen由ip加埠號改成sock的,試了也沒有效果。後來讓php-fpm在後臺執行,問題就沒有了。redis-server也是同樣。

反思

  • 執行方式錯誤
    啟動php-fpm和redis-server的時候我是前臺執行,然後ctrl-z的,這樣程式就處於掛起狀態了。php-fpm超時,redis沒反應也就不難理解了。讓程式在後臺可靠執行的幾種方法
    ctrl-c 是傳送SIGINT訊號,終止一個程式;ctrl-z 是傳送 SIGSTOP訊號,掛起一個程式;ctrl-d 不是傳送訊號,而是表示一個特殊的二進位制值,表示 EOF。可以通過jobs檢視當前有多少在後臺執行的命令;通過fg命令將後臺中的命令調至前臺繼續執行;也可以用bg將一個在後臺暫停的命令,變成繼續執行 (在後臺執行)。

  • 在ps檢視程式狀態的時候忽略了程式的狀態
    常見的程式狀態:
    D 不可中斷 Uninterruptible(usually IO)
    R 正在執行,或在佇列中的程式
    S 處於休眠狀態
    T 停止或被追蹤
    Z 殭屍程式
    W 進入記憶體交換(從核心2.6開始無效)
    X 死掉的程式
    <高優先順序
    n低優先順序
    s包含子程式
    +位於後臺的程式組
    在前臺執行php-fpm然後ctrl-z狀態是T,而正常執行時看到的是S,有的是Ss,Ss的那個主程式。

  • 更好的啟動方式
    編寫php-fpm啟動指令碼/etc/init.d/php-fpm,加入到service中,通過service來管理php-fpm的啟動。

相關文章