在生产环境中 php start.php restart之后 Fatal error: Uncaught Exception: Address already in use in
29403
第一次的stopping的日志是正常输出的,因为pid文件中的pid值和系统的对的上,然后看了下只stop了两个pid,导致start的时候端口被占用了。
这里写具体的系统环境相关信息 php版本 8.1 系统是centos 本地mac运行没这个问题
出现这个问题一般是因为runtime下的pid文件和系统实际情况不一致导致的, stop时会通过pid文件找到进程,然后停止。如果pid文件里的记录值是错的导致无法停止之前的进程,再次启动时会报占用错误。
造成pid文件不一致的原因一般是将错误的将pid文件放到了代码库,或者上传文件时上传了本地的pid等原因。 另外如果有手动kill了workerman的主进程,子进程还存在,也会有此问题。
社区里反馈有一些扩展影响了php的行为例如grpc扩展没有正确配置也会类似问题。
如果不是以上原因需要自己定位下,停止前cat下pid文件值,运行 ps auxf 看下进程树,看下是否对应。stop后 ps auxf 看下进程树是否正确。
如果某些操作导致主进程被杀死,子进程还在运行,php start.php stop 提示no run,php start.php start 提示端口被占用,这种情况有什么比较好的办法吗,只能手动一个个把子进程杀死?
一个一个杀死
感谢回复,目前没有再出现过
出现这个问题一般是因为runtime下的pid文件和系统实际情况不一致导致的,
stop时会通过pid文件找到进程,然后停止。如果pid文件里的记录值是错的导致无法停止之前的进程,再次启动时会报占用错误。
造成pid文件不一致的原因一般是将错误的将pid文件放到了代码库,或者上传文件时上传了本地的pid等原因。
另外如果有手动kill了workerman的主进程,子进程还存在,也会有此问题。
社区里反馈有一些扩展影响了php的行为例如grpc扩展没有正确配置也会类似问题。
如果不是以上原因需要自己定位下,停止前cat下pid文件值,运行 ps auxf 看下进程树,看下是否对应。stop后 ps auxf 看下进程树是否正确。
如果某些操作导致主进程被杀死,子进程还在运行,php start.php stop 提示no run,php start.php start 提示端口被占用,这种情况有什么比较好的办法吗,只能手动一个个把子进程杀死?
一个一个杀死
感谢回复,目前没有再出现过