Archive for the ‘网站性能’ Category

通过对MYSQL联合索引解决nginx下Fastcgi挂起卡死

nginx下Fastcgi解决挂起卡死》和《webbench对nginx进行压力测试》两篇文章中提到智力网站晒晒IQ网经常出现服务器挂起的情况。将服务器切换到apache,问题还是依旧。服务器使用的双核CPU,lovelucy发现其中一个CPU一直保持在100%,重启MYSQL后,情况稍好,但过了一会儿一个CPU又保持在100%。登录到mysql

/usr/local/mysql/bin/mysql -u用户名 -p密码
show processlist;

Read more

解决nginx服务器下wordpress上传附件出现HTTP 错误。

晒晒IQ网博客原本使用apache,最近改为了nginx。使用了一段时间发现,有部分附件无法上传。主要状况是图片全部都可以上传,但是部分FLASH文件却无法上传。出现http 错误,如图。
Read more

webbench对nginx进行压力测试

在《nginx下Fastcgi解决挂起卡死》提到的问题并没有完全解决。在流量不断增加的情况下,不想增加服务器配置的话只能做更多的优化。为了选择nginx合适的子进程数,对智力网站晒晒IQ网进行了压力测试。没有用ab,而是选择用webbench。

1、适用系统:Linux

2、编译安装:
1. wget http://www.sfr-fresh.com/unix/privat/webbench-1.5.tar.gz
2. tar zxvf webbench-1.5.tar.gz
3. cd webbench-1.5
4. make && make install

3、使用:

1. webbench -c 3000 -t 30  http://www.33iq.com

参数说明:-c表示并发数,-t表示持续时间(秒)

我使用了webbench -c 300 -t 10  http://www.33iq.com 分别在子进程数为20 、25、30、35、40、50的情况下进行了测试。测试结果如下:

webbench对nginx进行压力测试

根据数据最终选择了35。但结果不到10分钟fast-cgi又挂起了。后来想了想,最后把keepalivetime的时间下调到5秒(原来为30).减少服务器同一时间的连接数。目前暂时稳定。

nginx下Fastcgi解决挂起卡死

还是智力网站晒晒IQ网,使用的是万网云主机。配置是nginx+Fastcgi+mysql,问题情况是网站有时会莫名其妙出现2-3分钟卡死,页面空白在刷新,有时一直卡着,有时会报502错误,网站可以PING得通,内存、CPU都显示正常。网上找了下,感觉可能是因为Fastcgi挂起卡死了。找了些相关资料,修改了相关配置,具体如下。

调大缓存区

fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;
如果你使用的是nginx的负载均衡Proxying,调整
proxy_buffer_size  16k;   这里参数调大
proxy_buffers   4 16k;

调大子进程数

max_children 20 (可以调更大 我原来只设置了8。。)

调整之后目前还没有发现相关问题。

参考文档:

1、php-fpm.conf参数详解

2、nginx报的http错误解决方法

3、[php-fpm自动拉起]从nginx的502错误出发谈锁机制在服务器自动监控脚本中的应用

 

 

不唯一的唯一答案——MYSQL优化

MYSQL数据库里有一个表,有三个字段,id、type(课程名)、number(学号),课程名假设有三种,语文、数学、英语,学生有50名,每名学生可以任意选择课程(可都不选,也可都选),现在要列出选择全部课程学生的名单。

好吧,这看上去不像是个很难的问题,教科书中都应该有答案,来个否定之后的否定,not exist,结局是MYSQL经过40多秒后返回了正确答案。

看来这不是一个好方法,试了下group by,将选择三门课程的学生列出来。的确快了很多,但是再多出几个字段后,速度就慢了很多。

select * from jishuzhibiao where number in (select * from jishuzhibiao group by number, date, signal, frequency having count(distinct type)=3) and date in (select * from jishuzhibiao group by number, date, signal, frequency having count(distinct type)=3) and frequency in (select * from jishuzhibiao group by number, date, signal, frequency having count(distinct type)=3) and signal in (select * from jishuzhibiao group by number, date, signal, frequency having count(distinct type)=3)

(分别对number, date, signal, frequency进行分组,运行速度再次超过40秒)

最后通过创建视图还是解决了这个问题,

创建视图:create view st(number, date, signal, frequency) as select * from jishuzhibiao group by number, date, signal, frequency having count(distict type)=3

查询:select * from jishuzhibiao, st where jishuzhibiao.number=st.number and jishuzhibiao.date=st.date and jishuzhibiao.signal=st.signal and jishuzhibiao.frequency=st.frequency

Godaddy开启GZIP压缩

先介绍下本人在Godaddy上买的空间,无限空间+无限流量+Linux

一开始网上搜索了很多godaddy开启GZIP压缩的方法,但是在漫长等待php配置文件生效之后,发现貌似不太管用。

后来发现godaddy可以直接使用php的内置压缩函数,具体方法如下:

页面顶部加入代码:if(Extension_Loaded('zlib')) Ob_Start('ob_gzhandler');

页面底部加入代码:if(Extension_Loaded('zlib')) Ob_End_Flush();

测试了下很完美,压缩了超过70%

测试地址:http://tool.chinaz.com/Gzips/Default.aspx

此外CSS、JPG、JS等非PHP文件可以通过静态文本调用PHP压缩模块实现GZIP压缩效果,具体实现方法:http://zhiqiang.org/blog/it/speedup-blog-gzip-javascript-css.html

你还在用IE浏览器吗?

评价浏览器主要指标是速度和安全性。IE的浏览器的安全性一直被人诟病,其实不是因为IE的安全性有多差,而是研究IE的用户数大,所以研究的人也多了。

这里主要比较的浏览器的速度,先介绍下一些基本概念,浏览器获取页面显示请求页面的HTML代码,然后分析HTML代码,获取页面的组件(CSS文件、JS文件、图片等)。当然无论获取HTML代码还是组件都可能需要进行DNS解析。

其次这些组件一般都是顺序下载的,比如一个CSS文件100KB,一个JS文件1KB,浏览器往往需要下载完CSS文件,再下载JS文件(前提是CSS文件出现在JS文件前),这样网页显示会很慢会一直等待那个100K的CSS文件下载完。当然目前浏览器都支持并发,这样就可以同时下载CSS文件和JS文件,在http1.1的协议中,IE5/6/7、firefox2最多支持2个并发数,IE8、firefox2最多支持6个并发数,opera和safari最多支持8个并发数,chrome最多支持4个并发数。

也许你会觉得并发数对于浏览器浏览网页的速度提高不是很明显,我们可以通过实际测试来说明问题,使用在线浏览器并发测试工具,地址:http://site-perf.com/

http://www.sroan.com为例,分别使用2个并发数和6个并发数进行测试,结果如下:

2个并发数

6个并发数
通过对比可发现在相同条件下,6个并发数的浏览器比2个并发数的浏览器快了3.5秒,其中等待时间从71%下降到26%,这也是并发数度的好处(既在下载100K的CSS文件也同时可以下载1K的JS文件。)

当然这只是最肤浅得分析,如果要研究网站的性能就尽量使等待时间下降到0,通常合并JS、CSS等文件(同样100MB的1个文件进行复制速度肯定比100个1MB要快,因为IO读取写入耗时比传输大),同样网站为了负载均衡,将不同的文件放置于不同的域名机器下,这样导致了解析域名时间加长,反而影响加载速度。

最后引用一条等式:

全球IE用户×IE用户平均智商=全球chrome用户数×他们的平均智商+全球firefox用户数×他们的平均智商

你希望自己是在等号左边,还是在右边?

附chrome下载地:http://www.google.com/chrome