Swoole心跳是判断swoole连接是否正常
运行一段时间进程就挂掉,主进程存在,但worker进程全挂掉,无耐只能增加心跳做法
1.通过服务器端写shell脚本来判断主和子进程是否存在,每1分钟监听一次
2.通过websocket客户端来连接服务器,根据返回结果来判断服务是否正常。每1分钟监听一次
常驻内存的框架容易造成内存泄露
使用完变量等需要及时清理掉(unset), 如swoole 的onClose中清理
测试tcp
服务器方法:
netstat -anp | grep 9501
- 通过
telnet
方式登录远程主机:telnet 127.0.0.1 9501
-
tcp
客户端脚本
查看当前worker
进程数:ps -aft | grep tcp_server.php
swoole常用的命令:
swoole停止服务: kill -9 $(ps aux|grep 'socket.php'|grep -v grep|awk '{print $2}')
开启swoole服务压人后台命令:
screen php server.php
nohup php server.php &
swoole守护进程化。设置daemonize => 1时,程序将转入后台作为守护进程运行。长时间运行的服务器端程序必须启用此项
swoole 脚本,如果服务停止,每一分钟检测自动启动,配合cron定时任务运行下边的脚本文件
#!/bin/bash
count=`ps -fe |grep "socket.php" | grep -v "grep" | wc -l`
echo $count
if [ $count -lt 1 ]; then
ps -eaf |grep "socket.php" | grep -v "grep"| awk '{print $2}'|xargs kill -9
sleep 2
ulimit -c unlimited
/usr/local/php7/bin/php /data/www/shoxot-api/mqtt/socket.php
echo "restart";
echo $(date +%Y-%m-%d_%H:%M:%S) >/data/script/log/restart.log
fi
这里有一个梗
ulimit -c unlimited 这里设置了unlimited 如果报错了 会生成一个很大的core文件 ,并且很可能会重复的生成,导致硬盘直接占满,正式环境最好去掉。
*多个线程之间的变量共享,不能使用global,而要用官方的swoole_table