为什么会 wanmp 比 lnmp 慢了十倍呢?

2018-01-20 14:50:47 +08:00
 90safe

以前做项目习惯用 lnmp,前些天老板说要 win 系统才行,那我就用了 wamp。结果刚刚老板问我,为什么那么卡?我就比对了下速度。

两边机器配置完全一样,只是环境不同,一个是 lnmp,一个是 wnmp

先是 wamp,响应速度 1300ms,我就改成 nginx,响应速度变成 1200ms。

接着 lnmp,响应速度 120ms。

请问这是啥情况?有什么办法查看具体卡在哪个环节吗?是 nginx、还是 mysql、还是 php-fpm ?

7947 次点击
所在节点    程序员
58 条回复
likuku
2018-01-20 14:54:34 +08:00
Win 为何不用 IIS
likuku
2018-01-20 14:57:52 +08:00
"至于 Win 下 Nginx 使用原生 Win32 API,用 select 实现,而 Win 下比较先进的技术 I/O Completion Ports 据我所知有第三方做过,但官方 Nginx 貌似还没有用 IOCP,所以性能肯定没有 Linux 的 epoll 和 BSD 的 kqueue 好。"

作者:残风
链接: https://www.zhihu.com/question/53372247/answer/134816348
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
90safe
2018-01-20 14:59:06 +08:00
@likuku IIS 用得少,不太习惯。刚刚试了下不读取数据库,打开 phpmyadmin 页面,linux 是 100ms,win 是 400ms。这样都有四倍的差距。
zjsxwc
2018-01-20 14:59:27 +08:00
win 的进程开销比 Linux 的进程开销大很多吧
abcbuzhiming
2018-01-20 15:00:56 +08:00
linux 下的网络模型是 epoll,apache 和 nginx 的最新版本都支持这个,windows 下的网络模型是 IOCP (完成端口),据我所知,apache 和 nginx 的普通版本不支持 IOCP 模型,nginx 似乎有个非官方的版本支持 IOCP,因此他们的性能一定会比在 linux 下的慢
另外还有一个原因,在 linux 下的 php-fpm 是常驻进程的,而在 windows 下的 php 只能用 fastcgi,既不是常驻进程,性能也远低于 php-fpm。所以就算你把 Http 服务器换成 IIS,你的性能依然不会高到哪里去的
endlessing
2018-01-20 15:07:41 +08:00
莫不是连了 MySQL ?
90safe
2018-01-20 15:07:58 +08:00
@abcbuzhiming 还有一个就是,我刚刚试了下 phpmyadmin 的登录时间,linux 是 300ms,win 是 1600ms,这差距。。。。登录操作 = 连接读取数据库,也就是说在 mysql 的环节也慢。。。
cy97cool
2018-01-20 15:10:37 +08:00
Windows 服务器用 Nginx+PHP 有 xxfpm,可以让 PHP 常驻内存
chenqh
2018-01-20 15:11:07 +08:00
不应该啊,如果这么慢,php 在 windows 怎么有人用?
wkan
2018-01-20 15:12:40 +08:00
你要不要检查下 opcache 开没开
est
2018-01-20 15:14:14 +08:00
iis 快不仅是因为它用了 iocp,而是因为别人 http 处理逻辑是在内核实现的 http.sys 。性能比 linux 老内核高 50%没问题。只有 khttp 能一战

不过然并卵,dpdk 发来贺电。
jasontse
2018-01-20 15:14:22 +08:00
@abcbuzhiming 错很大。fpm 全称 FastCGI Process Manager,两种系统毫无疑问都是 FastCGI,执行后就销毁进程的叫 CGI。

Linux 和 Windows 确实存在性能差距,但是楼主的问题主要是调参,就这样回答楼主的问题无异于闭着眼睛开药。
kokutou
2018-01-20 15:17:23 +08:00
@chenqh #9 因为简单。。。
90safe
2018-01-20 15:21:43 +08:00
@wkan win 跟 linux 都没开的
tomczhen
2018-01-20 15:29:02 +08:00
其实楼主只是想找论据支持自己说服老板不要用 Windows Server 而已,你们都这样客观的分析问题就违背楼主初衷了,直接说 Windows Server 就是这样垃圾,一样的程序比 Linux 慢十几倍就 O 了。
90safe
2018-01-20 15:31:11 +08:00
大家好,我回来了,我把数据库连接从 localhost 改成 127.0.0.1,速度从 1300ms 提升到了 300ms,现在差距缩小剩 3 倍了。
liuxu
2018-01-20 15:33:26 +08:00
看看静态页访问速度怎样,如果静态也也慢就是 nginx 和 win 的问题,如果只是 php 慢,就用 xhprof 分析一下 php 这边哪部耗时了
90safe
2018-01-20 15:36:47 +08:00
虽然速度提升了不少,但是还是慢,还有办法优化吗? localhost 是因为 php-fpm 会检测是 ipv4 还是 ipv6,导致变慢,直接指定 127.0.0.1 就跳过检测了。现在差距还有 3-4 倍,急,在线等!
likuku
2018-01-20 15:38:32 +08:00
@chenqh 因为“自认会用 win ”的人远远多于摸过 Linux 的人。
90safe
2018-01-20 15:39:39 +08:00
@liuxu 用 phpmyadmin 的首页来测试,是没有涉及数据库操作,只有 nginx+php-fpm,速度是相差很小的的,大概 30ms 而已。但是如果登录连接数据库的话,速度就慢了很多很多。如果是 mysql 的问题,能怎么优化呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424498

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX