我博客用的是nginx+php的架构,架设在阿里云上,配置是1核+2GB内存,数据库是mysql,但是文章缓存在redis上。我域名用了HTTPS。
用阿里云性能测试,参数如下:
刚开始博客正常运行,cpu占用率持续100%,前台访问博客,延迟已经超过5秒,平时200ms左右。
博客是用laravel开发的,我以为是laravel框架过于庞大导致的。
后来我改了博客的入口文件,入口文件只输出一个字符串1。
但看了进程状态,如下,仍然感到十分惊讶,区区50个进程竟然把CPU逼到这种地步?
天蓬老师2017-04-11 10:39:35
2017年4月7日 14:12:08更新
测试了一下线性并发的pts和响应时间,数据如下:
线性并发:
并发数 | PTS(p/s) | 步调(s) | 预热(min) | 事务响应时间(页面响应时间)ms |
---|---|---|---|---|
50 | 9.0 | 1s | 0 | 5500ms |
45 | 9.0 | 1s | 0 | 5000ms |
40 | 9.1 | 1s | 0 | 4500ms |
30 | 9.3 | 1s | 0 | 3200ms |
20 | 9.5 | 1s | 0 | 2286ms |
10 | 9.5 | 1s | 0 | 1100ms |
随后测试了一下静态html页,pts大概是800左右,响应时间1.2ms
最后测试了一下空php文件,pts大概是500,响应时间2ms左右。
得出结论:
服务器使用top命令查看负载情况并不准确,可能是进程启动的一瞬间的cpu占用情况,有一定的延迟。
最准确的指标还是持续的pts
这是证明了laravel的性能真的不太好,相对于空php文件,pts下降了50倍。
原始答案
今天自己卸载了nginx的ssl配置模块,速度还是很慢。
应该不是HTTPS模块的问题。
PHP中文网2017-04-11 10:39:35
建议更改入口文件后,重启nginx和php-fpm看下,关注下nginx的log,看是否请求都正常。如果依然出现上述情况,可通过进程id查看哪个文件操作的进程
天蓬老师2017-04-11 10:39:35
题主所说的后来我改了博客的入口文件,入口文件只输出一个字符串1。
还是走的Laravel框架吧?应该是Laravel框架本身的开销比较大。
我刚才试了下,如果纯原生PHP输出一个非常简单的1
,应该不会这么高的CPU使用率的:
服务器也是阿里云,配置是单核CPU + 1G内存。
一般来说Laravel框架只有原生PHP的性能的10%左右的吧。50个并发导致CPU 100%应属正常情况。
不过你的博客日常PV有多少呀?要是经常性50个并发连接,那怎么着PV也得10万+吧? 这种情况下可以考虑把博客静态化,让nginx去扛,然后把登录和评论这种动态内容才通过PHP来处理。
再补充个:PHP7的性能比PHP5/PHP6都要好,现在都发布一年多了,题主可以考虑也升级到PHP7