部署 怎么验证访问速度慢的原因是什么?以及如何优化?

chancedoor · 2013年10月16日 · 最后由 kingwkb 回复于 2013年10月18日 · 5195 次阅读

阿里云用了几个月了,网站很多时候访问速度慢,间歇性 Bad Gate 一下,因为还在开发中,所以没有花时间去解决,现在网站要开始推广使用了,这种稳定性实在太糟糕了,想知道到底是我程序没优化好?还是服务器没维护好?还是阿里云的速度问题?

对于小网站来说 阿里云本身的性能还不至于拖慢访问速度 所以应当先从优化的角度入手

请问该怎样去排查呢?

1.磁盘 IO:我用dd if=/dev/zero of=test bs=64k count=4k oflag=dsync 测试了下,在 3~4.5m/s,这能说明问题嘛? 2.数据库存取:用的 mysql,网站数据量小,应该没问题。不过要想查看数据库操作的耗时该怎么做呢?是看 log 里的 ActiveRecord 耗时吗? 3.网站优化:这基本都没做,就是 rails 默认那些……nginx+unicorn 请问基本的优化应该从哪做起?这一块的监测是看 log 中的 Views 耗时吗?

监测

1.使用 newrelc http://newrelic.com ,可以监测程序性能也可监测服务器性能,记得在 My preferences 里把时区改了。 2.Chrome:虽然 newrelic 有 Browser 数据,但毕竟和实际感受不同,建议打开 Chrome 的开发者工具 查看 network 中的时间

优化

1.开启 Gzip:在 nginx 中开启 Gzip 压缩 http://wiki.nginx.org/HttpGzipModuleChs 压缩率 60% 多 感觉速度确实快了 至少到现在为止没有再出现之前那么慢 2.把 js 的 include_tag 放到末尾:感觉一般

昨天还看到微博上有人报怨并 at 了阿里云客服 据阿里云客服回复,三四个月后可能会改善

2 楼 已删除

#2 楼 @o_0 请问你是什么配置啊?有挂额外的数据盘吗?网站和数据库文件放在数据盘还是系统盘哇?有做过哪些优化没?

我在用盛大云。。。。

我用的也还行 虽然不是很好 但可以接受 512M 1G 网站在系统盘 数据在数据盘

数据库问题可能性大,可以开启 mysql 慢查询看看,该加索引的加索引,网站访问情况可以用阿里测看看

阿里云我觉得还没得 Linode 好

dd 才 3-4MB/s 也太慢了吧…… Linode 至少有 100MB/s

当然,这应该不会导致这么小的网站速度慢。

我刚试了试我的阿里云,青岛节点的 1g、1g、ubuntu,速度平均 9.4m/s 我自己主要用的服务器 dell 的 r920,raid0 上在 win2008r2 下用 hyper-v 虚拟的 ubuntu,30 多 mb/s, 最可怜的是前一阵子在 ruby-china 发试用的那个 SendCloud,测试做了两次就做不下去了……一次 885kb/s,一次 952kb/s………

你目前的情况应该是自己的程序有问题。 可以集成 newrelic 看一下。

#11 楼 @chaixl 请问用 newrelic 监测到的服务器内存使用情况 swap 怎么理解?这是不是内存不够了?就跑了一个 nginx + 4 个 unicorn rails 网站 CPU 99% 是怎么个情况?我只是通过浏览器访问网站而已

#12 楼 @ChanceDoor 你登录上阿里云服务器,用命令看看是什么程序占用 CPU。

#13 楼 @Victor 是用 top 吗?没办法刚好看到 CPU 高的那一时间段啊

#14 楼 @ChanceDoor 可以使用 htop 直观一点。我一般开个 mosh 打开一个窗口挂在那里发现有重计算的时候看一下,用 ssh 更换网络偶尔需要重新登陆 - -||

PS: 上图不是阿里云是 Ramnode

#15 楼 @wppurking 不过 newrelic 里也可以看进程 CPU 占用 99% 的时候 所有进程加起来才 1% IO 读写 51% 为什么 IO Wait 会是 99% 呢?

#16 楼 @ChanceDoor swap 多就是内存不足。 IOWait 很高,就是因为在读写 swap。

@ChanceDoor 刚才看到你另外一个帖子说配置是 512M 内存?内存太小了,而且开 4 个 unicorn worker,实际每一个 worker 都还蛮占内存的。

#18 楼 @chaixl 嗯 其中有两个是 DEMO 演示 以后要迁到客户的服务器 打算扩到 1G 但是貌似仍然有点不够 用 sinatra 会好点吗?

不止 4 个 woker 啊……4 个 master 每个 master 好像是 4 个 worker

@ChanceDoor 那内存必须不够用啊。16 个 worker,100M 一个,也要 1.6G 了。你可以查查每个 ruby 进程占了多少内存。

我试了一下 ec2

~$ dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
4096+0 records in
4096+0 records out
268435456 bytes (268 MB) copied, 39.7832 s, 6.7 MB/s
需要 登录 后方可回复, 如果你还没有账号请 注册新账号