症状一 磁盘满了
40G 的磁盘突然满了,查看后发现是 mysql 的 ibtmp1 文件超过 32G 了,这个是临时文件,通过修改配置解决。
ibtmp1是非压缩的 innodb 临时表的独立表空间,通过 innodb_temp_data_file_path 参数指定文件的路径,文件名和大小,默认配置为 ibtmp1:12M:autoextend,也就是说在支持大文件的系统这个文件大小是可以无限增长的。
1 | # 使用的命令 |
当时这里忽略了一个问题,为什么这个文件体积暴增?
症状二 程序执行很慢,定时任务重复执行
因为要全量发布文章,定时任务每 5 分钟执行发布 70 篇文章,发现多了好多进程,根据启动时间说明 5 分钟 70 篇文章没有发布完,导致下一个任务启动重复从数据库里取数据发布,这个时候想到的是定时任务加锁,防止重复执行。
1 | 1. 利用临时文件是否存在来实现 |
症状三 php 执行慢
观察文章发布日志,发现获取推荐文章比较慢,进而发现 order by rand() 函数,以为一共 2 万条数据不会慢到哪里去,没想到这个是巨坑。
1 |
|
修改完,2 分钟内 2000 条文章发布完毕。