EasySwoole常驻内存可能存在的问题及解决办法
EasySwoole是常驻内存型应用,控制器、MySQL连接可能都只初始化一次,所以可能会存在一些问题。
1. 用户信息错乱(可能性极小)
2. 数据库查询错乱(可能性也不太)
3. 数据库、Redis连接数过多
4. 内存溢出
Home of Little Jelly
EasySwoole是常驻内存型应用,控制器、MySQL连接可能都只初始化一次,所以可能会存在一些问题。
1. 用户信息错乱(可能性极小)
2. 数据库查询错乱(可能性也不太)
3. 数据库、Redis连接数过多
4. 内存溢出
PHP Swoole框架之EasySwoole。
安装
PHP Swoole扩展使用过程中有些事项需要注意下。
以下是本人在实战过程中踩过的坑。
ThinkPHP5在使用中,特别是执行耗时比较长的任务时,可能会出现`too many connections`的情况,就是连接数过多。
一方面,可能是程序上的问题,另一方面,这是数据库配置上的问题。
解决办法,修改 `application/database.php`, `params`参数默认为
有时候做开发是在Jupter环境或Google Colab环境(也是Jupter环境,支付Python2和Python3),但这种环境中使用MySQLdb需要先安装mysql-python。
命令如下
import sys
!{sys.executable} -m pip install mysql-python
import MySQLdb
MySQL 5.6升级到5.7注意点。
千万记得备份!
1. 安装方式出现变化,5.7安装完后需要先`初始化`再开启`mysqld`服务,且初始化完成后修改`root`密码的方式变了。
2. 一些变量不再支持,如 `thread_concurrency`,如果你配置了这个变量,删除它,不然不能开启`mysqld`服务。
3. `sql_mode`默认是`NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES`,即严格模式。
MySQL修改用户密码。
#### 方法1
适用于版本`<=5.6`的MySQL及已经重置过密码的MySQL5.7。
use mysql;
update user set password=password('123') where user='root' and host='localhost';
flush privileges;
MySQL数据库优化总结。
1. 尽量将多次查询放到一条SQL语句里执行,避免循环中的SQL查询,特别是数据库和网站分离时。
2. 对于left join,如果只是为了查询right表的某个字段,可选择使用配置文件来代替left join,将right的字段放入一个数组中,把数组序列化到一个文件中,需要用的时候反序列化,根据key查找value。
3. 使用数据库的内置函数
4. 只select用到的字段,而非select *
攻击模式处理方案。
方案(阿里云)
1. MySQL RDS添加只读实例,开启读写分离,平时可预留低配实例备用
2. MySQL数据库配置 wait_timeout和 interactive_timeout为 5~10,以便超时自动释放连接,避免连接数过多的问题
3. WAF CC自定义规则,设置单ip规定时长的访问限制及封禁时长,可设置2~3个阶段
4. WAF精准控制规,主要是黑白名单
阿里云Data Lake Analysis 查询Table Store数据。
Table Store
1. 开通Table Store服务(OTS)
2. 选择合适区域创建OTS实例,例 华北2北京区域下`labs`
3. 创建OTS数据表`web_page`