这里先说一下在linux环境下的。之后再说windows环境下的。
Linux系统下php-fpm 9000端口被占用解决方案:
有的老手直接把fpm和nginx相关配置改了, 完全可以。我们这里只说不想改端口,就想用本地9000端口的方法:
把所有php-fpm子进程停掉, 见下文
报错信息:
[root@i-qmb8tkgd test]# /usr/local/php/sbin/php-fpm [18-Oct-2015 21:54:04] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98) [18-Oct-2015 21:54:04] ERROR: FPM initialization failed
解决方案:
[root@i-qmb8tkgd test]# netstat -ntlp | grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 5229/php-fpm: maste [root@i-qmb8tkgd test]# ps -aux|grep pool phpz 8824 4.7 0.4 298276 16316 ? S 21:39 0:54 php-fpm: pool www phpz 9020 5.1 0.4 227220 19064 ? S 21:47 0:35 php-fpm: pool www phpz 9224 5.5 0.3 222156 14064 ? S 21:55 0:11 php-fpm: pool www root 9313 0.0 0.0 112640 932 pts/0 S+ 21:59 0:00 grep --color=auto pool [root@i-qmb8tkgd test]# kill 5229 [root@i-qmb8tkgd test]# kill 8824 [root@i-qmb8tkgd test]# kill 9020 [root@i-qmb8tkgd test]# kill 9224
命令行启动php-fpm
[root@i-qmb8tkgd test]# /usr/local/php/sbin/php-fpm
Windows系统下php-fpm 9000端口被占用的情况:
说到这里不妨先了解一下php-fpm这个东西。php-fpm全称为php-FastCGI process manager, 它是基于多进程服务治理思想构建的一套多进程管理程序, 性能一般,以稳定性著称,在php领域里最流行的,也是官方推崇的。替代玩法有中国研发名人韩天峰始创的swoole插件, 用的多进程持久化的玩法,速度飞快,但比较考验编程者的水平,目前不太皮实。
php-fpm如果启动失败了, 那也就意味着php和nginx的沟通桥梁断了。假设你习惯于使用phpstudy这类软件来部署现成的windows+php+nginx+mysql环境。失败的可能原因有:
1、上一次启动过的phpstudy因为某种原因, 后台服务仍然在运行, 没有完全退出干净, 再点启动就报错端口被占用;
2、之前部署过其他服务,配置完了换成phpstudy, 没卸载干净,或者丢在注册表服务里, 干脆就没删过。
3、自建的某些奇奇怪怪的私服游戏服务端网关就占用9000端口,在后台偷跑。
解决方案
开始->运行->输入cmd->按回车呼出Windows终端黑窗口。输入以下命令
netstat -aon | findstr "9000"
这里的netstat命令是windows的, 所以格式和linux下的参数-ntlp不一样。
找到相关进程的PID也就是Process ID, 之后用Windows命令taskkill加参数的方式杀掉指定进程。假如进程号是15231,则命令为:
taskkill /f /pid 15231
然后再重新启动一下php试试