许多并发连接的MySQL问题

这是一个32 GB RAM的六核心。 我已经安装了MySQL 5.1.47(backport)。 configuration几乎是标准的,除了max_connections设置为2000.另一方面在nginx上有PHP5.3 / FastCGI。 有一个非常简单的PHP应用程序应该送达。 NGINX可以在这台机器上并行处理数千个请求。 这个应用程序通过mysqli访问MySQL。 在mysqli中使用非持久连接时,达到100个并发连接时会出现问题。

[错误] 14074#0:* 296 FastCGI在stderr中发送:“PHP警告:mysqli :: mysqli():[2002]资源暂时不可用(试图通过unix连接:///tmp/mysqld.sock)在/ var /第7行/www/libs/db.php

我不知道要解决这个问题。 通过TCP连接到MySQL是可怕的慢。 有趣的是,当使用永久连接(在mysqli中添加“p:”到主机名)时,第一个5000-10000000个请求失败,出现与上述相同的错误,直到达到max连接(从webserver,设置为1500)。 第一次请求后,MySQL保持1500打开连接,一切正常,这样我可以做出我的1500个并发请求。 咦? 是否有可能,这是一个PHP FastCGI的问题?

这听起来好像连接没有及时清理。 如果是这样的话,“show processlist”应该显示连接。 看看MySQL的文档,看起来这可能是常见的PHP,除非某些PHP参数被调整。 您可能想浏览http://dev.mysql.com/doc/refman/5.0/en/too-many-connections.html上的文章和评论

TCP连接速度非常慢所带来的另一种可能性可能是MySQL(或tcpwrappers)试图进行主机名查找,查找速度很慢。 这在使用unix套接字时似乎不太可能,但是如果它试图匹配本地主机名或系统主机名,则可能需要查看是否有任何访问规则可以移动到IP或删除。

如果一次连接10,000次,那么有可能会接受10,000个中的1500个,其余的8500个将被拒绝(因为在连接可用之前不会被延迟)。 然后,后续请求将使用1500个大型持久性池。

在启动服务器时打开一次连接是否有问题?

这是什么操作系统上运行? Windows在TCP连接上的时间非常长。 东西在90秒左右。 您必须进行一些registry编辑,以缩短更短的时间。 也有助于将10k的端口限制提高到更高的水平。

你是否也调整了max_user_connections参数? 这可能是nginx被视为单个用户,并被该参数封顶。