我们有一台服务器最近遇到了一个问题,即 TTFB(第一个字节的时间)需要 2.0 分钟才能传递网站的某些子页面。托管在同一台服务器上的其他一些网站没有体验。奇怪的是,当这种情况发生时,它似乎总是 2 分钟,暗示某些事情正在超时,但响应是 200。
什么可能导致这个极长的 TTFB ?
网络服务器是运行 Apache 2 和 PHP 5.3.2 的 Ubuntu 版本 10.04
我在一家小公司工作,最多有 30 台联网设备。几周以来,我们观察到我们的互联网连接比以前慢得多。浏览页面,下载文件约为 50-300 kbps。但是当我通过 torrent 下载例如 Ubuntu 时,它是 ~8000 kbps。
我的 ISP 告诉我,我们的平均网络流量与往常一样。并且还要求我在http://www.speedtest.net上对受信任的服务器进行速度测试。结果是~40Mb/s 的上行和下行链路,但对其他人来说是~4-5Mb/s。
你能给我任何提示如何调查这个问题吗?
这是一个普通的客户端向服务器发送 AJAX 请求,而不使用任何库。
关于数据库:
数据库中只有 1 个表,有 2 列和 2 行。存储引擎InnoDB
注意:这是一个测试数据库。我还有另一个数据库,它有 4 个包含 5000-6000 条记录的表和 18 个少于 500 条记录的其他表
客户端.php:
<html>
...
<body>
<button class="btn__">Send</button>
<script>
var btn = document.querySelector('.btn__');
btn.onclick = function()
{
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
// document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
}
};
xmlhttp.open("POST", "server_files/server.php", true);
xmlhttp.send();
}
</script>
</body>
...
</html>
server.php (CASE #1): 没有对数据库的连接查询
<?php
// $con = mysqli_connect("host","username","pass","test_db");
echo json_encode([
'success' => true
]);
exit();
(响应时间约为 59 毫秒)
server.php (CASE #2): 到数据库的连接查询
<?php
$con = mysqli_connect("host","username","pass","test_db");
echo json_encode([
'success' => true
]);
exit();
(响应时间约为 452 毫秒;这不应该发生,直到一周前才发生)
如果我包含与数据库的连接线,为什么响应需要很长时间?
编辑:(只是如果它有助于更好地理解)
当我SHOW PROCESSLIST;
在客户端发送 AJAX 请求时运行时,我看到了这个,
这纯粹是出于好奇,但对于我设置的每个本地服务器,在显示页面之前总是有 0.5-2 秒的延迟。
举个例子,我设置了一个运行 apache、mysql 和 php 的完全空白的 ubuntu 服务器。如果我有一个带有 phpinfo() 的文件;输入并从真正位于服务器旁边的机器请求该页面,该页面仍将需要一两秒钟才能加载。为什么它不是 [几乎] 即时的?
两台机器都使用千兆交换机运行四核处理器、8GB 内存等。为什么像 phpinfo 这样的简单请求需要这么长时间才能“发生”?
我们在 Ubuntu LTS 虚拟机 (VMWare) 上安装了 Drupal 7,在同一台物理服务器上安装了 MySQL 5.1 服务器,但在不同的虚拟机上。
Drupal 网站目前正在开发中,因此几乎没有流量,但是,尽管 ping 和 shell 访问速度快如闪电,但 Drupal 网站运行速度非常慢(>5 秒加载任何页面)。在这里和其他地方进行研究后,我了解到问题在于 SQL 是通过网络接口访问的,而 Drupal 显然做得非常糟糕。
我已经检查了 DNS 解析,Drupal 端(db 主机由 ip 给出,/etc/hosts 文件中有一个 dns 条目)和 MySQL 端(skip-name-resolve 已打开,drupal 客户端是通过 ip 地址授予访问权限)。
Drupal 开发查询日志说:
在 5993.89 毫秒内执行了 336 次查询。超过 5 毫秒的查询会突出显示。页面执行时间为 7015.35 毫秒。使用的内存:devel_boot()=5.53 MB,devel_shutdown()=93.35 MB,PHP peak=94 MB。
奇怪的是,对于单个页面加载,大约 2/3 的查询速度很快,其他的则非常慢:
1.765 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
575.825 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
13.585 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
466.9914 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache WHERE cid IN (:cids_0)
default
1.841 drupal_lookup_pathP A E
SELECT source FROM url_alias WHERE alias = :alias AND language IN (:language, :language_none) ORDER BY language ASC, pid DESC
default
通过启用 Drupal 缓存可以纠正匿名访问的情况。然而,整个管理界面仍然很慢。
目前的公司政策是单独拥有数据库服务器。是否有任何其他选项可以加快 Drupal 的速度?
默认数据库配置显示驱动程序“mysql”,也许我应该将其更改为“mysqli”或“pdo_mysql”?但是,如果我将它更改为 mysqli,database.inc 会抱怨相关的驱动程序不存在——任何专门为 drupal 安装的驱动程序,因为 mysqli 和 pdo 都在 PHP 本身中启用。
我在我的服务器上监视我的磁盘,因为我的网站很慢。
这是我的磁盘统计信息:
读取:0.29 请求/秒 写入:50.19 请求/秒
我不明白为什么我的磁盘上每秒有 50 个书面请求。
我怎样才能找到写得像猪的程序?命令行 ?程序 ?
更新:服务器是一个 debian etch。该磁盘位于 SAN 中,因此它是一个虚拟磁盘。
我的数据库是 mysql,我的网站是 ruby on rails。
我有 1 GB 内存。
下面是 free 命令的结果:
free -m
total used free shared buffers cached
Mem: 995 769 225 0 46 421
-/+ buffers/cache: 301 693
Swap: 1906 0 1906
我不认为是交换问题。我不明白 :(
好的,经过几次搜索,我发现:
Postfix 在我的 syslog 文件中按秒添加 10 个条目:s,日志是这样的:
Feb 16 10:51:41 myhost postfix/local[24480]: 333902F1CE: to=<[email protected]>, orig_to=<root>, relay=local, delay=73, delays=42/25/0/6.1, dsn=5.1.1, status=bounced (unknown user: "ovh")
Feb 16 10:51:41 myhost postfix/qmgr[3753]: 528032F1D3: removed
Feb 16 10:51:41 myhost postfix/cleanup[24624]: CEBAD2F1D4: message-id=<[email protected]>
Feb 16 10:51:41 myhost postfix/bounce[24575]: B8EE32F19B: sender non-delivery notification: DDE2D2F1DE
Feb 16 10:51:41 myhost postfix/qmgr[3753]: DDE2D2F1DE: from=<>, size=2798, nrcpt=1 (queue active)
Feb 16 10:51:41 myhost postfix/cleanup[25934]: 659B02F1D3: message-id=<[email protected]>
Feb 16 10:51:41 myhost postfix/qmgr[3753]: B8EE32F19B: removed
Feb 16 10:51:41 myhost postfix/local[24948]: DDE2D2F1DE: to=<[email protected]>, orig_to=<[email protected]>, relay=local, delay=15, delays=12/2/0/1.3, dsn=5.1.1, status=bounced (unknown user: "ovh")
Feb 16 10:51:41 myhost postfix/bounce[24726]: 333902F1CE: sender non-delivery notification: 659B02F1D3
Feb 16 10:51:41 myhost postfix/qmgr[3753]: CEBAD2F1D4: from=<[email protected]>, size=983, nrcpt=1 (queue active)
Feb 16 10:51:41 myhost postfix/qmgr[3753]: 333902F1CE: removed
Feb 16 10:51:41 myhost postfix/qmgr[3753]: 659B02F1D3: from=<>, size=2792, nrcpt=1 (queue active)
Feb 16 10:51:41 myhost postfix/qmgr[3753]: DDE2D2F1DE: removed
Feb 16 10:51:47 myhost postfix/local[24480]: 659B02F1D3: to=<[email protected]>, orig_to=<[email protected]>, relay=local, delay=8.7, delays=3.3/0/0/5.4, dsn=5.1.1, status=bounced (unknown user: "ovh")
Feb 16 10:51:47 myhost postfix/local[25978]: CEBAD2F1D4: to=<[email protected]>, orig_to=<root>, relay=local, delay=32, delays=27/0/0/5.4, dsn=5.1.1, status=bounced (unknown user: "ovh")
Feb 16 10:51:47 myhost postfix/qmgr[3753]: 659B02F1D3: removed
Feb 16 10:51:47 myhost postfix/cleanup[24906]: 1A7512F19B: message-id=<[email protected]>
Feb 16 10:51:53 myhost postfix/bounce[24726]: CEBAD2F1D4: sender non-delivery notification: 1A7512F19B
Feb 16 10:51:53 myhost postfix/qmgr[3753]: CEBAD2F1D4: removed
Feb 16 10:51:53 myhost postfix/qmgr[3753]: 1A7512F19B: from=<>, size=2798, nrcpt=1 (queue active)
Feb 16 10:51:59 myhost postfix/local[24948]: 1A7512F19B: to=<[email protected]>, orig_to=<[email protected]>, relay=local, delay=12, delays=6.2/0/0/6.1, dsn=5.1.1, status=bounced (unknown user: "ovh")
Feb 16 10:51:59 myhost postfix/qmgr[3753]: 1A7512F19B: removed
Feb 16 10:52:11 myhost /USR/SBIN/CRON[25984]: (root) CMD (/usr/local/rtm/bin/rtm 18 > /dev/null 2> /dev/null)
Feb 16 10:52:11 myhost /USR/SBIN/CRON[25985]: (root) CMD (wget -O /dev/null http://monsite.com/cron/desactive_arene)
Feb 16 10:52:16 myhost /USR/SBIN/CRON[25987]: (root) CMD (run-parts /usr/local/oco/bin/60sec >/dev/null 2>/dev/null)
Feb 16 10:52:22 myhost /USR/SBIN/CRON[25988]: (root) CMD (run-parts /usr/local/oco/bin/120sec >/dev/null 2>/dev/null)
Feb 16 10:52:39 myhost postfix/pickup[23034]: 8A8CC2F1BD: uid=0 from=<root>
Feb 16 10:52:44 myhost postfix/cleanup[24624]: 8A8CC2F1BD: message-id=<[email protected]>
Feb 16 10:52:44 myhost postfix/qmgr[3753]: 8A8CC2F1BD: from=<[email protected]>, size=983, nrcpt=1 (queue active)
Feb 16 10:52:44 myhost postfix/local[24480]: 8A8CC2F1BD: to=<[email protected]>, orig_to=<root>, relay=local, delay=21, delays=15/0/0/6.1, dsn=5.1.1, status=bounced (unknown user: "ovh")
在这里,我不明白发生了什么。
我工作的公司在给定时间大约有 45-55 个同时登录的用户(本地和远程/VPN)。我们目前订阅了 ADSL 连接,但随着用户数量的增加,上传/下载速度变慢了。所以,关于将我们的连接升级到 t1 线路,我有几个问题。
我知道 t1 线路上的通道数比我们当前的 ADSL 连接要多得多,但我听说 t1 线路上的活跃用户数应该不超过 ~30 以获得最佳性能。我认为这个陈述取决于每个用户使用连接的目的,并且可能会根据这个变量而改变。话虽如此,我试图根据我们的主要部门分解该线路在我们组织中的使用方式:
销售 (约占总用户的 60%) - 日常上网、电子邮件、研究、偶尔的流媒体
营销 (约占总用户的 15%) - 严重依赖上传/下载、流媒体、文件共享
其他 (约占总用户的 25%) - 电子邮件,很少使用任何连接密集型活动。
我曾考虑为我们的本地用户保留 ADSL,并将 t1 专用于我们的远程用户(反之亦然),但成本明显高于我们的预期。
所有因素都相同(用户数量、我们当前活动的下载/上传频率)您是否怀疑从我们当前的 ADSL 线路过渡到 t1 线路会显着提高性能?
你有什么想法或建议?
我们有一半的团队在印度,一半在加利福尼亚州的圣何塞。连续两周,周日晚上,印度诺伊达(也就是德里)的团队无法到达美国的某些地点。例如,他们无法访问 LogMeIn 或 GoDaddy 等商业网站。Traceroute 显示连接缓慢,但并非不可能。而且连接是断断续续的:有时它们可以连接一段时间,但很快就会断开连接。
有谁知道现在亚洲和美国之间的一般互联网问题?尤其是通过新加坡和圣何塞的互联网流量?
从另一个联系人那里收到:“NANOG 邮件列表中也报告了这个问题。不仅是印度,整个亚太地区都经历了高延迟。” 所以我想此时不是我们的供应商,而是整个亚太地区的供应商。
在工作中,我们目前使用的是 Linksys WRT54GL(是的,我知道),运行 DDWRT v.23。大约有 50 台计算机插入我们的网络,全部通过 Linksys SRW2048 交换机进行路由。
问题是所有连接都很慢,甚至路由器的 GUI 也很慢。
我检查了负载值,它们似乎很好。虽然可用内存只有 0.6 MB 左右。
有什么我应该做的设置或我需要考虑的其他事情吗?
编辑:
抱歉,内存使用率很高。它只剩下大约 0.6 MB。我能做些什么来释放一些内存?无线网络之类的东西被禁用了。
谢谢!
我对新安装的 MySQL 盒子有问题:
当尝试使用多个客户端和大量重试访问数据库时,偶尔连接时间会超过 3 秒。我只有在尝试通过 tcp 连接时才会出现这种行为(无论客户端是本地还是远程)。如果达到此状态,则无论端口如何,每个连接都需要 3 秒。
我试图在另一台服务器上重现这种行为,但旧数据库服务器和新从服务器都没有显示这种行为(对我来说这没有任何意义,因为主服务器和从服务器运行在相同的操作系统上,相同的补丁级别,相同的数据库版本,相同的配置...)
在互联网上搜索,我找到了一封电子邮件的链接,该链接准确描述了我的经历: http: //www.mail-archive.com/[email protected]/msg02040.html,但我找不到任何解决方案。
有没有人有任何经验可以解释这一点?
此致,
卡西
编辑:在有人问之前:这不是 DNS 问题,我们在每个新的 MySQL 安装中都将 skip-name-resolve 设置为默认值。