服务启动异常处理
最近遇到兩個(gè)奇怪的問題。問題一:部署完一個(gè)node服務(wù)后,發(fā)現(xiàn)只有ipv6的端口監(jiān)聽。
問題二:這個(gè)node服務(wù)殺不掉。殺掉后,又自動(dòng)生成一個(gè)新的進(jìn)程。
經(jīng)過查閱資料后發(fā)現(xiàn)如下:
問題一解決:
? ? ? ? ? ? ? ? ? ? ? ? ? ipv6 實(shí)際上是可以處理 ipv4 的請求的當(dāng) V6ONLY 沒有開啟的時(shí)候,反之不然 #if APR_HAVE_IPV6 #ifdef AP_ENABLE_V4_MAPPED ? ?int v6only_setting = 0; #else ? ?int v6only_setting = 1; #endif #endif 在這個(gè)函數(shù)中,可以看到如果監(jiān)聽的地址是 ipv6,那么會(huì)去設(shè)置 IPV6_V6ONLY 這個(gè) socket 選項(xiàng), 現(xiàn)在,關(guān)鍵是看 AP_ENABLE_V4_MAPPED 是怎么定義的 在 Linux 中,默認(rèn)情況下,AP_ENABLE_V4_MAPPED 是 1,那么 服務(wù) 就會(huì)直接監(jiān)聽 ipv6, 因?yàn)榇藭r(shí) ipv6 的 socket 能夠處理 ipv4 的請求;另外,bind() 系統(tǒng)調(diào)用會(huì)對用戶空間的進(jìn)程透明處理 ipv6 沒有開啟的情況,此時(shí)會(huì)監(jiān)聽到 ipv4。 而如果我們在編譯 服務(wù) 的時(shí)候使用 --disable-v4-mapped 參數(shù)禁止 ipv4 mapped,那么默認(rèn)情況下, httpd 會(huì)分別監(jiān)聽在 ipv4 和 ipv6,而非只監(jiān)聽 ipv6
問題二解決:
這個(gè)node服務(wù)是pm2管理的,所以單獨(dú)殺掉該進(jìn)程并不起效。需要?dú)⒌魀m2進(jìn)程。同時(shí)刪除.root文件。查看pm2管理的進(jìn)程pm2 list
ubuntu下自帶node,所以要安裝node注意避免沖突!
轉(zhuǎn)載于:https://blog.51cto.com/jack88/2170498
總結(jié)
- 上一篇: runloop解决Cell上主线程卡顿
- 下一篇: redis服务器防止入侵,加ip,密码限