Swoole那些坑

Swoole心跳是判断swoole连接是否正常

运行一段时间进程就挂掉,主进程存在,但worker进程全挂掉,无耐只能增加心跳做法

1.通过服务器端写shell脚本来判断主和子进程是否存在,每1分钟监听一次
2.通过websocket客户端来连接服务器,根据返回结果来判断服务是否正常。每1分钟监听一次

 

常驻内存的框架容易造成内存泄露

使用完变量等需要及时清理掉(unset), 如swoole 的onClose中清理

 

测试tcp服务器方法:

  1. netstat -anp | grep 9501
  2. 通过telnet方式登录远程主机:telnet 127.0.0.1 9501
  3. 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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值