ThinkPHP5 MySQL too many connections
ThinkPHP5在使用中,特别是执行耗时比较长的任务时,可能会出现`too many connections`的情况,就是连接数过多。
一方面,可能是程序上的问题,另一方面,这是数据库配置上的问题。
解决办法,修改 `application/database.php`, `params`参数默认为
Home of Little Jelly
ThinkPHP5在使用中,特别是执行耗时比较长的任务时,可能会出现`too many connections`的情况,就是连接数过多。
一方面,可能是程序上的问题,另一方面,这是数据库配置上的问题。
解决办法,修改 `application/database.php`, `params`参数默认为
PHP中,数据的`foreach`循环有两种传递方式,按值传递和按引用传递。
1. 按值传递
通过数组索引修改原数组
代码示例:
ThinkPHP5中数据库在`database.php`中配置,需要数据库操作时自己完成连接,也可以在`Db::connect()`中动态地传入字符串或数组类型的数据库连接信息。
Db类
`Db`类使用前需先声明引用 `use think\Db;`
PHP多服务器子域名session共享。
第一步 配置php memcache扩展
wget http://pecl.php.net/get/memcache-2.2.7.tgz
攻击模式处理方案。
方案(阿里云)
1. MySQL RDS添加只读实例,开启读写分离,平时可预留低配实例备用
2. MySQL数据库配置 wait_timeout和 interactive_timeout为 5~10,以便超时自动释放连接,避免连接数过多的问题
3. WAF CC自定义规则,设置单ip规定时长的访问限制及封禁时长,可设置2~3个阶段
4. WAF精准控制规,主要是黑白名单
PHP FPM慢请求日志收集。
编辑php-fpm配置文件
vi /etc/php-fpm.d/www.conf
将 `request_slowlog_timeout`前的注释取消,并设置为需要的值,默认单位为秒。
PHP SESSION心得:
1. 单台服务器时,`session.save_handler`用`files`,不要用`memcache`,不然 `session_start` 会有1%左右的机率出现严重耗时的情况。Redis未测试,应该也没有files快。
2. 多台服务器时,session可以存储在Memcache/Redis/Mysql中
3. 并发高时,应降低session回收机率,即配置 `session.gc_divisor`
4. 在PHP环境下,默认的 `session.lazy_write = On`无需禁用。不然也会出现1中的问题。
PHP高并发处理心得
服务器配置
1. Web: 4C8G 120GSSD
2. MySQL:2C4G
高并发处理心得
交易平台数据实时刷新方案
需求
挂单数据、成交数据、用户余额实时刷新
实现
关键:
WebSocket+Redis
ThinkPHP5默认开启了日志的写入。
如果要彻底关闭日志,打开 `application` 目录下的 `config.php`。
找到 `log`那一块儿,可以看到