redis鏈接成功操做無反應,nginx 504的另外一個緣由

遇到的2個問題

問題1: redis-server啓動後,redis-client鏈接成功,set時無反應,查看redis-server進程存在。
問題2: nginx,php-fpm,訪問html頁面正常,訪問php頁面每次出現504錯誤,修改配置文件調大響應時間均無效。php

一些嘗試

這兩個問題不是同一天遇到的,究根結底緣由是同樣的。奇葩的是nginx以前運行的好好的,忽然就504了怎麼改也回不來了,修改配置文件,查看錯誤日誌,重啓,重裝軟件,這些嘗試後都沒有效果。 google有說把php-fpm的listen由ip加端口號改爲sock的,試了也沒有效果。後來讓php-fpm在後臺運行,問題就沒有了。redis-server也是一樣。html

反思

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

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

  • 更好的啓動方式
    編寫php-fpm啓動腳本/etc/init.d/php-fpm,加入到service中,經過service來管理php-fpm的啓動。redis

相關文章
相關標籤/搜索