mysql 服务器负载问题排查

2023-03-21 22:00:52 +08:00
 coolloves
linux,mysql 5.7.4,机器 8c 16G 只有 mysql 服务,数据库不大,查询也不是很多,正常情况下,机器负载都是 0.x
但是最近发现每小时会出现负载增高(10 左右)的情况.是周期性的,会持续 10 来分钟,但是业务部门表示并没有定时任务.高负载的时候下,业务系统也没有明显的问题.
mysql 使用 innodb,poolsize 设置为 10G.

1-我在负载增高的时候,登陆 mysql,使用 root 账号查询 show processlist;确实没有太多,只有个位数查询,通过 prometheus,看 mysql 的数据,没有明显的波动,qps 平均只有十几.其余的指标也没有明显差异.
2-此时,使用 iostat/iotop 等工具查看,无高 io,甚至几乎没太多 io,和平常无异
3-内存和平常无差异,16G 内存,只有 3-4G,innodb pool 的情况查看,没有异常,命中率,page free 等指标正常.
4-开了慢查,设置 set global long_query_time=1;期间也并无慢查信息.
5-目前唯一有异常的就是 vmstat 的时候,r 数值是 10 左右.其余数值和平常无异

查看了 message 日志,和 mysql 的 log 日志,都没有什么明显的异常,dmesg 看内核信息也没有明显异常,请教下,这里排队的进程应该如何排查呢,真不知道是怎么产生的,
1239 次点击
所在节点    MySQL
4 条回复
CEBBCAT
2023-03-21 23:47:03 +08:00
你说的负载是指 CPU 负载对吧?

负载升高的时候哪个进程占 CPU 多呢? VPS 还是物理机?可否录制当时的进程情况?比如都有哪些进程,各自的状态、系统调用,如果能通过 strace 这种方式获取 CPU 运行的函数名等等信息就好了。

我初步的建议是贴一下收集的基础信息,比如 TCP 各状态数量、CPU 一些指标(如 switch )的曲线,反正是越多越好。
coolloves
2023-03-22 09:05:18 +08:00
我说的负载是系统显示的负载, load average: 11.29, 11.64, 8.52
平时就是 mysqlcpu 占用比较高,在 100%-200%之间,系统负载升高的时候,mysqlcpu 占用也差不多没什么变化,
vmware 的虚拟机,宿主 cpu 占用也不高,
进程,ps -ef 查看,就是只有 prometheus export 和 zabbix 监控进程和 mysql,剩下的都是默认的系统进程
strace 查过 mysql 的进程.我不是很会看,如下,搜了下,貌似是正常情况,正常情况下也是这些东西一直 repeat.
```
poll([{fd=68, events=POLLIN|POLLPRI}], 1, 28800000) = 1 ([{fd=68, revents=POLLIN}])
recvfrom(68, "e\1\0\0", 4, MSG_DONTWAIT, NULL, NULL) = 4
recvfrom(68, "\3select\n \n \n "..., 357, MSG_DONTWAIT, NULL, NULL) = 357
sendto(68, "\1\0\0\1\4=\0\0\2\3def\3bid\20subject_priori"..., 419, MSG_DONTWAIT, NULL, 0) = 419
recvfrom(68, 0x7f7b68025730, 4, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=68, events=POLLIN|POLLPRI}], 1, 28800000) = 1 ([{fd=68, revents=POLLIN}])
recvfrom(68, "\304\0\0\0", 4, MSG_DONTWAIT, NULL, NULL) = 4
recvfrom(68, "\3select \n \n id, old_id, o"..., 196, MSG_DONTWAIT, NULL, NULL) = 196
sendto(68, "\1\0\0\1\v+\0\0\2\3def\3bid\7sys_org\7sys_or"..., 764, MSG_DONTWAIT, NULL, 0) = 764
recvfrom(68, 0x7f7b68025730, 4, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=68, events=POLLIN|POLLPRI}], 1, 28800000) = 1 ([{fd=68, revents=POLLIN}])
recvfrom(68, "\350\0\0\0", 4, MSG_DONTWAIT, NULL, NULL) = 4
recvfrom(68, "\3select \n \n id, oldId, or"..., 232, MSG_DONTWAIT, NULL, NULL) = 232
sendto(68, "\1\0\0\1\17-\0\0\2\3def\3bid\10sys_user\10sys_u"..., 1050, MSG_DONTWAIT, NULL, 0) = 1050
recvfrom(68, 0x7f7b68025730, 4, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
```
coolloves
2023-03-22 09:26:03 +08:00
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─firewalld───{firewalld}
├─irqbalance
├─lvmetad
├─mysql_alarm───17*[{mysql_alarm}]
├─mysqld───74*[{mysqld}]
├─polkitd───5*[{polkitd}]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─vmtoolsd───{vmtoolsd}
└─zabbix_agentd───5*[zabbix_agentd]

目前的系统进程情况 zabbix_agentd/mysql_alarm 监控
ice2016
2023-03-22 09:41:09 +08:00
看下升高时的系统进程,日志,定位下机器在做什么,如果是很有规律的应该是定时任务之类的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/925988

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX