寻求有关我在朋友的帮助下设置的新 VPS 的建议。一切似乎都运行良好,第一次加载后页面加载速度很快,即使是简单的基于文本的网站,第一次加载也需要十秒钟。
我推测这是一个基于 DNS 的问题(或者可能与 Apache 有关?),因为 IP 正在被解析,有人可以解释我是否正确以及如何改进它吗?
域名:bradfordians.co.uk、castlegardenspreschool.com 和 pezcuckow.com
非常感谢您的建议!
有人能确认他们是否遇到了我所描述的速度减慢的情况吗?
w 的输出:
17:24:40 up 6:22, 2 users, load average: 0.64, 0.39, 0.45
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 130.88.177.204 16:44 38:00 0.02s 0.02s -bash
root pts/1 130.88.177.204 17:24 0.00s 0.01s 0.00s w
免费的输出:
total used free shared buffers cached
Mem: 2048 320 1727 0 0 0
-/+ buffers/cache: 320 1727
Swap: 0 0 0
顶部的开始:
top - 17:26:46 up 6:25, 2 users, load average: 0.21, 0.29, 0.41
Tasks: 81 total, 1 running, 80 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2097152k total, 328552k used, 1768600k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 18 0 2156 668 572 S 0.0 0.0 0:00.23 init
1350 mysql 15 0 125m 15m 4248 S 0.0 0.8 0:05.74 mysqld
1702 root 18 0 10008 2836 2292 S 0.0 0.1 0:00.02 sshd
1710 root 15 0 3844 1540 1248 S 0.0 0.1 0:00.02 bash
3580 root 18 0 3244 436 328 S 0.0 0.0 0:00.05 da-popb4smtp
3589 nobody 19 0 9136 1352 944 S 0.0 0.1 0:00.21 directadmin
服务器处于合理负载下时:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1350 mysql 15 0 126m 15m 4252 S 25.1 0.8 0:14.37 mysqld
31859 apache 15 0 50436 41m 1988 S 0.3 2.0 0:00.85 httpd
32146 apache 15 0 50464 41m 1972 S 0.3 2.0 0:00.75 httpd
1 root 18 0 2156 668 572 S 0.0 0.0 0:00.23 init
1702 root 18 0 10008 2836 2292 S 0.0 0.1 0:00.02 sshd
我得到了非常奇怪的负载冲击测试结果,这可能有关吗?
答案1
我不认为这是一个 DNS 问题...DNS 解析对我来说非常快。
ikbenbart$ dig castlegardenspreschool.com
; <<>> DiG 9.6.0-APPLE-P2 <<>> castlegardenspreschool.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44600
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;castlegardenspreschool.com. IN A
;; ANSWER SECTION:
castlegardenspreschool.com. 14390 IN A 78.129.132.155
;; Query time: 7 msec
;; SERVER: 192.168.220.51#53(192.168.220.51)
;; WHEN: Mon Mar 28 17:53:06 2011
;; MSG SIZE rcvd: 60
引起我注意的一件事是ping延迟:
ikbenbart$ ping 78.129.132.155
PING 78.129.132.155 (78.129.132.155): 56 data bytes
64 bytes from 78.129.132.155: icmp_seq=0 ttl=54 time=23.482 ms
64 bytes from 78.129.132.155: icmp_seq=1 ttl=54 time=21.030 ms
64 bytes from 78.129.132.155: icmp_seq=2 ttl=54 time=24.165 ms
64 bytes from 78.129.132.155: icmp_seq=3 ttl=54 time=22.786 ms
64 bytes from 78.129.132.155: icmp_seq=4 ttl=54 time=19.822 ms
64 bytes from 78.129.132.155: icmp_seq=5 ttl=54 time=21.464 ms
64 bytes from 78.129.132.155: icmp_seq=6 ttl=54 time=354.739 ms
64 bytes from 78.129.132.155: icmp_seq=7 ttl=54 time=21.032 ms
64 bytes from 78.129.132.155: icmp_seq=8 ttl=54 time=21.691 ms
64 bytes from 78.129.132.155: icmp_seq=9 ttl=54 time=20.745 ms
64 bytes from 78.129.132.155: icmp_seq=10 ttl=54 time=346.652 ms
64 bytes from 78.129.132.155: icmp_seq=11 ttl=54 time=21.422 ms
64 bytes from 78.129.132.155: icmp_seq=12 ttl=54 time=291.492 ms
64 bytes from 78.129.132.155: icmp_seq=13 ttl=54 time=622.309 ms
64 bytes from 78.129.132.155: icmp_seq=14 ttl=54 time=339.109 ms
64 bytes from 78.129.132.155: icmp_seq=15 ttl=54 time=567.751 ms
64 bytes from 78.129.132.155: icmp_seq=16 ttl=54 time=170.745 ms
64 bytes from 78.129.132.155: icmp_seq=17 ttl=54 time=465.188 ms
那里有很多峰值……服务器上的负载如何?尝试运行命令w
,free -m
看看会得到什么。
答案2
您可以添加nameserver 8.8.8.8
到顶部/etc/resolv.conf
以查看是否是 DNS 问题。
答案3
我注意到了一些事情,你可以检查一下:
- 这萤火虫FireFox 扩展在诊断此类页面速度/加载问题时非常有用(查看“网络”选项卡)。慢速是一个相关的扩展,可以提出建议来提高性能(请注意,并非所有建议都对您的网站有效)。
- 在我进行的几次测试页面加载中,我从未发现任何与 DNS 相关的问题。
- 您的许多图片都非常大。请考虑尝试优化它们或更改格式以获得一些潜在的显著收益(例如:PNG 转换为 JPG)。
- 考虑缩小一些 JavaScript 文件。
- 考虑至少暂时禁用 mod_deflate 以进行测试。我发现,在 CPU 速度较慢且负载较重的服务器上,不压缩页面可以显著提高性能。YMMV,但尝试一下没有坏处。
- 您的幼儿园网站存在一些 404 错误。
- 幼儿园网站的性能问题最为严重,这可能是由于需要加载的文件数量(35)造成的。加载时,每个文件都会占用一个 Apache 客户端。如果您的 Apache MaxClients 只有 50,那么几个人同时加载您的页面可能会导致 50 个文件很快被占用,并导致超过这个数量的连接延迟或超时。请注意,每页 35 个文件本身并不坏,但您必须意识到这会如何影响您网站的性能和页面加载。
- 确保 Apache MaxClients 足够高,可以支持并发用户数,但又不能高到用尽所有 RAM(尤其是当您还运行 MySQL 时)。
- 减少 Apache 负载但增加可提供的文件数量的另一种方法是使用更高性能的 Web 服务器(如 lighttpd/nginx)来处理所有静态内容(JavaScript、CSS、图像),并让 Apache 仅提供重量级的 PHP 页面。
- 使用 mod_expires 可能有助于减少随着时间的推移内容的重新加载。
- 确保您正在使用某种 PHP 操作码缓存(APC、eAccelerator)。
- 您可以在服务器上使用 ab (ApacheBench) 对网站性能进行基准测试。我现在会使用它来获取基准,然后在每次尝试提高性能后查看结果。测试各种文件类型(PHP、HTML、CSS、图像等)。基准测试还可以指出您网站瓶颈(CPU、RAM、IO 等)。
我会先查看 Apache 状态模块的输出,看看问题是否确实与最大可用客户端数量有关。如果有很多可用客户端,但网站仍然很慢,则可能涉及其他更微妙的问题。