Php MySQL高CPU使用率和持久链接

Php MySQL高CPU使用率和持久链接,php,mysql,Php,Mysql,我在mysqld进程上有非常高的CPU峰值(超过100%,甚至一度达到300%)。我的平均负载约为:.25、.34、.28 我读了这篇关于这个问题的文章: 要做的主要事情之一是禁用持久连接。所以我检查了php.ini和mysql.allow_persistent=on和mysql.max_persistent=-1,这意味着没有限制 在更改任何内容之前,这给我提出了几个问题,以确保: 如果我的mysqld进程每几秒钟就达到100%以上,那么我的平均负载不应该比现在更高吗 禁用持久性链接会做什么?

我在mysqld进程上有非常高的CPU峰值(超过100%,甚至一度达到300%)。我的平均负载约为:.25、.34、.28

我读了这篇关于这个问题的文章:

要做的主要事情之一是禁用持久连接。所以我检查了php.ini和mysql.allow_persistent=on和mysql.max_persistent=-1,这意味着没有限制

在更改任何内容之前,这给我提出了几个问题,以确保:

  • 如果我的mysqld进程每几秒钟就达到100%以上,那么我的平均负载不应该比现在更高吗
  • 禁用持久性链接会做什么?我的脚本会继续正常工作吗
  • 如果我关闭并重新加载php,这对我当前的用户意味着什么,因为将会有很多活跃的用户
  • 编辑:


    CPU信息:Core2Quad q9400 2.6 Ghz

    峰值正常。这是MySQL正在做的工作。你的平均负荷似乎合适

    禁用持久链接只意味着脚本无法使用到数据库的现有连接。我不建议禁用此功能。至少,如果您想禁用它们,请稍后在应用程序上执行,而不是在MySQL上执行。这甚至可能略微增加负载,具体取决于条件


    最后,DB持久性与站点上的用户无关(通常)。用户发出请求,一旦加载了所有页面资源,也就是说,直到下一个请求。(除少数特定情况外。)在任何情况下,当请求发生时,脚本仍将连接到数据库。

    持久连接本身不会使用任何CPU-如果没有任何东西使用连接,它只是处于空闲状态,只会消耗一点内存并占用一个套接字

    负载平均值就是平均值。如果您有一个每秒10次在0%和100%之间交替的进程,则平均负载为0.5。它们有助于找出长期持续的高cpu,但本质上可以隐藏/消除峰值的迹象

    通常不需要与mysql的持久连接。MySQL有一个相对快速的连接协议,使用持久连接节省的时间非常少。缺点是,一旦连接变得持久,它就可能处于不一致的状态。e、 g.如果使用该连接的应用程序意外死亡,MySQL将不会看到并开始清理。这意味着应用程序创建的任何服务器端变量、任何锁、任何事务等。。。将保留应用程序崩溃时的状态


    当连接被另一个应用程序重新使用时,你将从水槽里的脏盘子和没有冲洗的马桶开始。由于事务/锁悬而未决,它很容易导致死锁-新应用程序不会知道这些,旧应用程序也不会放弃这些。谢谢厕所类比:)所以my php.ini中的持久链接选项很好,但不要使用mysql\u pconnect-明白了。在哪一点(数字)是否应该开始担心平均负载?超过1.0、5.0、20.0?持久连接没有问题,只要你有适当的“zomg I just up my pants”错误处理,以防你的任何脚本——如果脚本死掉,然后对连接发出一个关闭调用,以便mysql能够清理。我见过负载在20+范围内的系统仍然能够完全响应。平均负载只是一个简单的诊断,并不能真正告诉您系统其余部分有多忙。平均负载为0.01时,系统正在爬行,因为有什么东西完全占用了磁盘。高cpu负载本身并不意味着什么。可接受的负载取决于您拥有的cpu数量。一个CPU的一致负载为1时,会出现下降,但4个CPU可能在达到负载4时才会下降。在共享CPU的虚拟环境中,这还受到同时步进所有CPU、等待其他VM上加载的需要的影响。关键是,在特定机器的上下文之外谈论负载会变得有点复杂。