好的,所以我不知道这是否是一个重复的问题,如果是的话我很抱歉(搜索后我找不到类似的内容 =/)
我的服务器似乎正在运行一个比正常 mysql 进程更大的进程:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31382 mysql 20 0 562m 97m 4244 S 73 19.7 2830:07 mysqld
但是当我在 mysql 中执行 SHOW PROCESSLIST 时,一切似乎都处于休眠状态:
mysql> SHOW PROCESSLIST;
+------+-------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+-------+-----------+------+---------+------+-------+------------------+
| 3982 | dlp_w | localhost | dlp | Sleep | 767 | | NULL |
| 3983 | dlp_r | localhost | dlp | Sleep | 0 | | NULL |
| 3986 | dlp_w | localhost | dlp | Sleep | 788 | | NULL |
| 3987 | dlp_r | localhost | dlp | Sleep | 0 | | NULL |
| 3988 | dlp_w | localhost | dlp | Sleep | 727 | | NULL |
| 3989 | dlp_r | localhost | dlp | Sleep | 0 | | NULL |
| 4019 | root | localhost | dlp | Query | 0 | NULL | SHOW PROCESSLIST |
| 4020 | dlp_w | localhost | dlp | Sleep | 708 | | NULL |
| 4021 | dlp_r | localhost | dlp | Sleep | 0 | | NULL |
| 4022 | dlp_w | localhost | dlp | Sleep | 57 | | NULL |
| 4023 | dlp_r | localhost | dlp | Sleep | 0 | | NULL |
| 4024 | dlp_w | localhost | dlp | Sleep | 788 | | NULL |
| 4025 | dlp_r | localhost | dlp | Sleep | 0 | | NULL |
+------+-------+-----------+------+---------+------+-------+------------------+
不过,我也感到困惑,为什么有这么多进程处于休眠状态。命令执行完成后,它们难道不应该全部消失吗?
感谢大家的帮助=D
答案1
该过程仅使用 100MB 内存。如果您在配置中启用了任何缓存,它将把查询和结果放入内存中,以便加快下一个查询的速度。
至于休眠连接。它们是来自您的应用程序但尚未关闭的连接。mysql 假设在每次查询后关闭连接,这太可怕了。这意味着您的应用程序必须为每个查询打开一个新连接,并减慢页面加载的渲染时间。