服务启动异常处理

最近遇到两个奇怪的问题。问题一:部署完一个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注意避免冲突!

猜你喜欢

转载自blog.51cto.com/jack88/2170498