我在
mysqld进程上的cpu峰值非常高(大于100%,甚至在一点上看到300%).我的平均负载大约是:.25,.34,.28.
我读了这篇关于这个问题的精彩帖子:MySQL high CPU usage@H_301_2@
其中一项主要工作是禁用持久连接.所以我检查了我的PHP.ini和MysqL.allow_persistent = on和MysqL.max_persistent = -1 – 这意味着没有限制.@H_301_2@
在改变任何事情之前,这为我提出了一些问题,以确保:@H_301_2@
>如果我的MysqLd进程每隔几秒钟超过100%,我的负载平均值不应高于那么?
>什么会禁用持久链接 – 我的脚本会继续按原样运行吗?
>如果我关闭它并重新加载PHP这对我当前的用户意味着什么,因为会有很多活跃的用户.@H_301_2@
编辑:@H_301_2@
持久连接本身不会使用任何cpu – 如果没有使用连接,它只是闲置而只消耗一点内存并占用套接字.
负载平均值就是 – 平均值.如果你的进程在每秒10次和0%之间交替变换,你的平均负载为0.5.它们有助于找出长期持久的高cpu,但是由于它们的性质隐藏/消除了尖峰的迹象.@H_301_2@
通常不需要与MysqL的持久连接. MysqL具有相对快速的连接协议,使用持久连接节省的时间相当少.缺点是一旦连接持续存在,它就会处于不一致状态.例如如果使用连接的应用程序意外死亡,MysqL将无法看到并开始清理.这意味着应用程序创建的任何服务器端变量,任何锁定,任何事务等等都将保留在应用程序崩溃时所处的状态.@H_301_2@
当连接被另一个应用程序重新使用时,您将从水槽中的脏盘子和未冲洗的马桶开始.它很容易导致死锁,因为悬挂的事务/锁定 – 新的应用程序将无法了解它们,旧的应用程序不再放弃那些.@H_301_2@