今日早上一起来就看到钉钉上有一堆报错信息,全都是job平台的.格式如下
1 2 3 | [Job管理平台报警]job_id:13(邮件发送) 执行出错,返回错误码是1,错误原因是命令运行失败,业务级别:L1,报警时间:2019-07-26 06:22 [Job管理平台报警]job_id:15(订单过期) 执行出错,返回错误码是1,错误原因是命令运行失败,业务级别:L1,报警时间:2019-07-26 06:22 |
总计20多个,心一下就凉了.立马处理这个问题.
问题排错
既然是命令运行失败,那我们就先手动来运行一次命令.so.我就来手动执行一次命令
1 2 | > /usr/bin/php /data/www/server/yii queue/email/run > no data to handle… |
命令执行成功.什么情况.既然命令没有问题,那会不会是其他问题呢.查看job日志得到如下结果
1 | > Error: SQLSTATE[HY000] [2002] No such file or directory |
数据库链接出现问题.数据库链接出现问题无非如下.
1 2 | 1.连接数过多,无法处理了. 2.数据库服务挂了.导致php的mysqli的扩展找不到mysql.sock文件. |
数据库链接
既然是数据库链接过多,那我们就来查看一下
1 | show variables like ‘max_connections’; |
得到结果为200.在查看当时系统日志,cpu才运行到40%,内存才10%都不到,很明显.不是这个.
MYSQL.SOCK
既然不是连接数过多,那就应该是mysql.sock不在了.造成文件不在的两个原因第一,因为mysql.sock文件是在系统挂载盘,如果挂载盘出现问题了,sock文件也会不在.但是我们的网站文件也在挂载盘,如果掉了,那网站也会出现问题,显然不是.那就是mysql服务挂了.查看内容日志
1 2 3 4 | cat /var/log/kern.log | grep ‘Jul 26 06’ | more type=1400 audit(1564093267.882:225): apparmor=”STATUS” operation=”profile_replace” profile=”unconfined” name=”/usr/sbin/mysqld” pid=2297 c omm=”apparmor_parser” |
果然,在第一行就提示apparmor在限制文件的访问.后面几次访问都不能进行访问了.在查看系统日志.
1 | cat /var/log/syslog |
得到结果如下
1 2 3 4 5 6 7 8 | Jul 26 06:20:30 qy-guanjia-01 systemd[1]: Starting Daily apt upgrade and clean activities… Jul 26 06:20:59 qy-guanjia-01 systemd[1]: Reloading. Jul 26 06:20:59 qy-guanjia-01 systemd[1]: Started ACPI event daemon. Jul 26 06:20:59 qy-guanjia-01 systemd[1]: Stopping MySQL Community Server… Jul 26 06:21:01 qy-guanjia-01 systemd[1]: Stopped MySQL Community Server. Jul 26 06:21:01 qy-guanjia-01 systemd[1]: Reloading. Jul 26 06:21:01 qy-guanjia-01 systemd[1]: Started ACPI event daemon. Jul 26 06:21:01 qy-guanjia-01 systemd[1]: Stopped MySQL Community Server. |
由于在自动更新,所以停止mysql服务.至此,问题原因被查到.
解决
因为mysql服务被停止了,所以mysql相关的服务都挂了.由于在自动更新,所以我们就需要禁止掉自动更新,由于系统是ubuntu.所以解决方案如下.
1 2 3 4 5 | vim /etc/apt/apt.conf.d/10periodic APT::Periodic::Update-Package-Lists “1”; // 将1改为0,禁用掉 APT::Periodic::Download-Upgradeable-Packages “0”; APT::Periodic::AutocleanInterval “0”; |
至此,就解决掉了.
扩展DDOS,DOS解决方案
同时在demsg查到如下.
1 | TCP: request_sock_TCP: Possible SYN flooding on port 3306. Sending cookies. Check SNMP counters. |
由于cookie溢出,被怀疑有Dos或者DDos攻击,解决方案如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | vim /etc/sysctl.conf #最关键参数,默认为5,修改为0 表示不要重发 net.ipv4.tcp_synack_retries = 0 #半连接队列长度 net.ipv4.tcp_max_syn_backlog = 200000 #系统允许的文件句柄的最大数目,因为连接需要占用文件句柄 fs.file-max = 819200 #用来应对突发的大并发connect 请求 net.core.somaxconn = 65536 #最大的TCP 数据接收缓冲(字节) net.core.rmem_max = 1024123000 #最大的TCP 数据发送缓冲(字节) net.core.wmem_max = 16777216 #网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目 net.core.netdev_max_backlog = 165536 #本机主动连接其他机器时的端口分配范围 net.ipv4.ip_local_port_range = 10000 65535 sysctl -p # 生效 |