繁体   English   中英

与套接字超时相关的Apache2 / http + MySQL / Wordpress加载问题

[英]Apache2/http + MySQL/Wordpress loading issue related to socket timeout

我有一个与Apache2 / php中的default_socket_timeout有关的奇怪问题-但它仅与MySQL连接(更具体地说是与Wordpress结合)发生。

基本上,每当我加载Wordpress时,它都会“卡住”,并且不会继续进行请求。 如果我重试(重新加载)或按ESC键并打开新的浏览器,则新连接会立即加载。 我相信“第一个”连接有问题,后续的连接都很好(直到周期开始),但是我不知道如何解决这个问题。 我在任何地方都找不到类似的问题,因此我认为这是一个非常独特的情况。

该连接问题最初持续了60秒,然后又加载了该站点(快速)。 这导致我调查php / MySQL设置,并且发现/etc/php5/apache2/php.ini中的default_socket_timeout更改会影响此问题。 现在,我已经在Wordpress目录中的.htaccess文件中更改了此值,这使问题更加可承受(php_value default_socket_timeout 13)。

但是,这不是理想的解决方案,因此,如果有人可以就此问题提供一些帮助,我将不胜感激。

您可以在http://frozenbyte.com/test_wordpress/上自己进行测试-很可能会得到13秒钟的“等待中...”,然后加载。 这是100%标准的Wordpress安装。

该站点位于虚拟主机上,并且我具有Shell访问权限(但是我无法访问phpmyadmin)。 我可以发布php.ini值,尽管我坚信它们都是默认值。 我也没有在日志文件中发现任何可疑的东西,但是我不是专家。 我尚未安装/完成该服务器的配置(无论如何我的技能都受到限制),因此我并不十分了解任何内部工作原理,但我认为这是相当标准的。

更多背景:

这个问题曾经发生在与数据库有任何关系的所有事物上(例如phpBB,尤其是一些自定义但简单的数据库脚本),但是似乎已经变成了仅Wordpress的问题。 该问题与负载或任何其他此类问题无关,并且与一天中的时间无关。 至少已经两年了。 这个问题始于第一次安装Wordpress,尽管如果有内存可以使用,那么一切都可以正常工作(很多年前)。 现在,它会影响所有的Wordpress安装(我正在运行三个,使用不同的表前缀)。 我99%肯定问题不是MySQL本身造成的-使用外部MySQL数据库无济于事。 提供商已经对服务器/主机进行了多年的更新,我怀疑这些更新中的一个可能已经引入了此更新,也许以后的更新会针对除Wordpress之外的所有内容进行修复。 虽然只是一个理论。 提供者也没有任何线索,我可能需要问一些更具体的问题。

在某些测试中,启用Google Chrome浏览器中的开发人员工具有助于缓解该问题(这样就减少了发生的频率),但是在我自己的测试中,我看不出太大的区别。 这在所有浏览器上都会发生(我已经测试了Firefox2 / Firefox3,IE6 / IE7,最新的Opera,最新的Chrome)。

禁用/删除所有.htaccess文件没有任何作用。

常规的非MySQL网页加载非常好,包括一些复杂的php页面-例如,仅检查根站点(尽管它没有指向Wordpress的链接)。 如今phpBB(/ board)也可以正常运行(但是过去也有同样的问题,程度较小,不知道何时/为什么消失了)。

所以我很茫然。 所有帮助非常感谢!

编辑:

听起来这确实可能与DNS问题/ MySQL特权有关……我仍然无法使其正常工作。

这是我添加的两个赠款(根据http://slackwiki.org/MySQL ):将所有特权授予数据库。*至'dbuser'@'hosts-ip'由密码'passwordhash'标识;

将所有特权授予数据库。*至'dbuser'@'frozenbyte.com'由密码'passwordhash'标识;

这是/ etc / hosts:

127.0.0.1本地主机localhost.localdomain

195.xx.xx.107 Frozenbyte.com

Wordpress只有dbuser的东西(例如define('DB_USER','dbuser');),但是我不确定是否需要在这里使用其他用户,例如www-data或其他东西。

WordPress的主机是“本地主机”。 如果我将其更改为“ 127.0.0.1”,则行为是相同的。 “ frozenbyte.com”和“ 195.xx.xx.107”会导致网站无限加载并以白页结束(我会说60秒后)。

编辑2:

我现在似乎已经赋予mysql它所需的所有权限,但仍然没有任何变化。 这是我所做的:

将所有特权授予数据库。*以'passwordhash'密码标识为'dbuser'@'%';

mysql>从mysql.user中选择User,Host;
+ ------------------ + ---------------- +
| 用户| 主持人
+ ------------------ + ---------------- +
| dbuser | %|
| dbuser | 195.xx.xx.107 |
| dbuser | Frozenbyte.com |
| debian-sys-maint | 本地主机|
| dbuser | 本地主机|
| 根| 本地主机|
+ ------------------ + ---------------- +
设置6行(0.00秒)

mysql>刷新权限;

我认为这应该是正确的,或者至少不会引起任何特权问题。

DNS可能存在的问题以及如何解决的方法(我尚未弄清楚)-任何提示都将很有用。

编辑3:

好的,这令人困惑。 通过使用“ show processlist;”,我发现在此非连接期间,MySQL实际上正在休眠。 这里:

mysql>显示进程列表;
| 88752 | dbuser | 本地主机| 数据库| 睡眠| 13 | | NULL |

当那13秒或我在default_socket_timeout中设置的时间到时,MySQL将处理查询。 我读了一些有关DNS问题的信息,听起来它们会产生另一种命令(例如,“ Connect”而不是“ Sleep”),因此,我认为这与DNS问题无关。

有谁知道为什么会启动这样的睡眠过程? 有人有一个类似的问题,显然是由php中的session_start()引起的,并通过session_save_path()解决了,但是我将“ php_value session.save_path / mypath /”放到了我的.htaccess文件中,它没有任何帮助,所以这可能与该用户遇到的问题类似但不相同...

--skip-name-resolve选项

添加此行:

skip-name-resolve

/etc/my.cnf

如果与mysql相关,您如何在mysql中定义wordpress用户? 如果您通过TCP连接并且mysql用户受到主机限制(例如grant blah to user@example.com on ...则可能是DNS查找超时。 MySQL必须对TCP连接进行反向DNS查找,如果存在一些奇怪的防火墙/路由规则,则该超时可能会超时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM