遇到的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的啟動。