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