免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷
打印 上一主题 下一主题

专家座谈——Web开发中你所遇到的性能问题(大奖) [复制链接]

论坛徽章:
0
61 [报告]
发表于 2011-09-18 11:53 |只看该作者

论坛徽章:
0
62 [报告]
发表于 2011-09-18 21:49 |只看该作者
web开发有很多方式啊?刚刚看到了说linux可以设置包装和管理?不知道是怎么回事,有知道的吗?

论坛徽章:
0
63 [报告]
发表于 2011-09-18 23:19 |只看该作者
1,初学者怎么入门Web开发?
我是一个初学者,我选择了PHP,已经接触了大概一个月的样子,感觉还ok。我觉得不论什么东西都要自己主动去学习、去动手,只有发现问题、解决问题才能真正的学会东西、才能进步。
2,你选哪种Web开发技术,JEE、PHP、.Net、RoR、Django......?,依据是什么?
我选择了PHP,首先觉得他相对于jsp比较容易上手,相对于asp更开放。然后因为他现在也算是比较主流吧。
3,如果你是一名Web开发者,请把你在Web开发中遇到的性能问题跟大家做个分享。
这个性能方面的问题可能我还暂时没法考虑,目前主要是考虑功能实现方面的问题,我认为对于我初学,首先得实现功能,然后才是逐步完善,包括性能方面。

论坛徽章:
0
64 [报告]
发表于 2011-09-19 09:49 |只看该作者
对初学者而言,php比python更容易学的N个理由.

1. php内置了相当丰富的库,不用像python那样先import后用 ...
Orpherus 发表于 2011-09-18 11:30



   python发明的初衷并不是针对web应用开发, 在python中web应用开发只是属于它其中一部分,
所以他没像php那么刻意去封装web应用的接口, 而php的诞生是针对web应用开发, 所以封装的 API 特别好。


   php把python的wcgi封装进如$_GET, $_POST之类, 其实在这方面python是在web框架中实现。
所以一般做web用python起手都要用框架, 而php随便写个脚本就可以了。


   当然, 对于傻瓜级的应用对于开发都来说, 特别用于上手, 越灵活越复杂入门就难, 好比j2ee和asp.net的比较,
但对于学习为目的和一名有实践经验的人大多数会选择python, 或ruby。


   php的诞生是基于当年并没有一个种很好的语言去做web应用, 今时今日已经大不相同, 那么出发点也不相同。

论坛徽章:
0
65
发表于 2011-09-19 12:31
本帖最后由 zavakid 于 2011-09-19 13:11 编辑

我也来说一下吧。

背景:
我经历的有个项目,量非常大,一天的PV大概有5-6千万的PV级别。
经过一系列的计算(分析apache的cookie log和按照2/8原理进行分析),得出对某一URL的吞吐量最少需要达到700多的TPS(在15~40的并发数之间),才能满足我们的需求。
同时,我们在服务端使用的架构是 httpd + mod_jk + jboss 。

过程:
在完成编码之后,在搭建好环境,开始性能测试的时候,仅仅在15个并发的情况下,服务器的load就异常的高达八九百多。如下图:

从上图可以看出,load飙升十分疯狂,一直飙到900多。并且httpd的进程非常多。

再使用 vmstat 1 查看,如下图:

从上图可以看出,每秒的bo(写入块),in(中断)和cs(上下文切换)都非常的高。

为了准确的判断是哪个软件引起的问题,我们关闭 httpd,而直接对 jboss 进行压力测试,发现上述现象不复存在。进而我们推测引起问题的原因是在 httpd 。
除此之外,根据上面的现象,我们还可以推测到应该是 httpd 写文件造成的。但此 url 并没有写文件,于是将焦点转移到了 httpd 的配置文件。
httpd配置文件只有三处写文件,分别是 error log ,和两个 cookie log。
在使用排除法一一进行测试了之后,我们发现是由 syslog 写的  cookie log 引起的 。
对这个 syslog 的 cookie log 注释掉,重启应用,也就回复正常了。
但这紧紧只是规避了问题,并没有彻底解决问题。

下面继续:
确定问题是由于syslog引起了之后,就开始寻找解决问题的办法。
在google了一阵之后,发现这样一篇文章:http://stackoverflow.com/questions/208098/can-syslog-performance-be-improved
只要在/etc/syslog.conf的配置上讲对应的syslog配置成异步写文件的方式,就可以提高syslog的性能。

于是又按照其方法进行操作(将syslog设置成异步方式),这下服务器的性能已经好了很多了,看来优化效果不错。此时 load 已经由上面不可思议的数值下降到了 8 左右。load已经减少100倍了!

但一般的建议是,load最好少于3,而现在的load,也远远达不到要求。
于是又google了一番,发现了syslog-ng,所谓ng,就是next generation的意思,听这个名字,就自然联想到性能也许会好一些。
将系统的日志记录系统换成 syslog-ng,于是问题解决。

结论&经验:
1. syslog异步写要比syslog同步写性能好,但还是推荐使用syslog-ng。
2. 发现性能问题时,不要慌,应迅速找到性能瓶颈。一般的对于服务器,主要就是看是 CPU,内存,IO,网络等之类的瓶颈,然后再继续深入某个子系统进行分析。
3. 迅速定位到发生问题的软件,我们对外提供的服务,往往都是由几个组件组合的(比如此文的 httpd,mod_jk和jboss),对于比较少的组件,按照排除法往往都很有效。
4. 走了弯路不气馁,一般都走几次弯路,就有经验了。
5. 学习好操作系统非常重要,这个道理大家都懂的

论坛徽章:
0
66 [报告]
发表于 2011-09-19 12:40 |只看该作者
楼上写的,不得不顶!

论坛徽章:
0
67 [报告]
发表于 2011-09-19 18:28 |只看该作者

一次性能问题解决的经历

本帖最后由 zavakid 于 2011-09-20 11:40 编辑

很奇怪,怎么我之前回复的帖子不见了? 那是我花了一个中午的时间写的 :emn34 :  那我就再写一遍吧。

背景
我经历的一个项目,其访问量十分巨大,一天的PV大概有5-6千万的PV级别。
经过一系列的计算(大概就是通过 httpd 的 cookie log 和 2/8 原则进行推算),得出平均每台服务器对某一URL的吞吐量需要在高峰期能顶住高达700多的TPS(在15~40的并发数之间)。
我们项目中采用的服务端架构是 httpd + mod_jk + jboss 。

过程
在编码完成和测试到一定程度之后,我们开始性能测试。
但一个很奇怪的现象发生了:仅仅在15个并发的情况下,服务器的load就异常的高达八九百多。如下图:

从上图可以看出,服务器的load异常的高,并且httpd的进程非常高(我们的httpd是开启worker模式的)

再使用vmstat 1 查看,结果也很异常,如下:

从上图可以看出,每秒的bo(写入磁盘的block),in(中断) 和cs(上下文切换)的变化都异常大。

接着我们绕过 httpd ,直接压 jboss ,居然没有上述现象,服务器一切正常。于是我们断定,问题出现在 httpd 。
从上面两张图可以看出,问题很可能出现在服务器的IO压力上。而针对测试的这一URL,并没有对服务器进行文件的读写。
因此,我们将焦点转到了httpd配置的日志读写上。

我们设置的 httpd 读写文件配置主要有三个: 一个 errer log 写,两个 cookie log 写(分别使用 cronlog 和 syslog)。
在经过排查法排查的时候,终于发现是由于 syslog 写 cookie log 的时候出现的问题。
也就是说:在并发量不算高的时候,使用 syslog 频繁写,会对服务器的IO有比较大的压力。
在取消了 syslog 写 cookie log 之后,服务器回覆正常,上述问题不复存在。

但这只是规避了问题,并没有解决问题。
于是google了一阵,发现了 stackoverflow 上有对 syslog 的优化:syslog 可以配置成异步的。(见:http://stackoverflow.com/questio ... ormance-be-improved
于是按照其方法,又开始测试了一下,这下服务器一下子好了许多,见下图:


但这样的load仍然不符合要求。
一般来讲,load平均值最好是和CPU的个数一样,因为那样就意味着没有进程(线程)再等待CPU。
于是,又google了一把,这一次,发现了syslog-ng。所谓ng,就是next generation的意思,听这个名字,就自然联想到性能也许会好一些。
于是将 syslog 换成 syslog-ng,再进行压测,结果一切恢复,服务器一切正常,load也回到了合理范围内!

总结
1. 服务器上最好使用 syslog-ng。如果非要使用syslog,那最好配置成异步写;
2. 碰到性能问题不要着急,一个一个子系统进行排查:CPU,内存,IO,网络等;
3. 迅速定位出问题的软件,如果软件较少,可以使用排除法,效果好。比如本文的 httpd , jboss ;
4. 学会使用linux的监控命令;
5. 学习操作系统,这个道理大家都懂的

论坛徽章:
0
68 [报告]
发表于 2011-09-20 11:28 |只看该作者
本帖最后由 2gua 于 2011-09-20 11:31 编辑

回复 67# zavakid


    是,我也看到你的帖子,我才顶你的,没事,我记住了。而且你前面写的,比你现在写的多哦?

论坛徽章:
0
69 [报告]
发表于 2011-09-20 11:36 |只看该作者
回复 68# 2gua
我重新写了一遍,保存起来了,哈,下次就不会丢掉了。

论坛徽章:
0
70 [报告]
发表于 2011-09-20 11:37 |只看该作者
回复 68# 2gua
我刚刚是重新在写,不小心保存了的。:wink:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP