寻Apache2下Discuz高性能配置方案

2009年04月28日 9:42 下午  |  分类:Develop

服务器品牌 DELL
服务器型号 PE1850
cpu类型 Intel Xeon 2.80GHz
cpu个数 2
内存条类型 512M
内存条个数 2
硬盘类型1 36G
硬盘个数1 1

操作系统:Linux centos2 2.6.18-92.el5
Apache 2.0
PHP 5.2.9

目前300并发,持续时间1小时
测试截图:


已安装Discuz7.0版,目前论坛并无帖子。

下午进行LoadRunner测试,
100用户并发时,响应时间在1.5s左右。
400用户并发时,响应时间约为3s,但每秒连接数一直处于170左右,无法继续上升。
此时,web服务器CPU占用70%-80%
Db服务器为2%,基本无压力。

在网上看到一些文章,Apache在配置正确的情况下基本上可以处理每秒2K的并发请求,但今天的测试让我大跌眼镜。
响应时间也不够理想,况且这次的测试只是测了首页的访问,而且首页是做了缓存处理的。
最开始是怀疑httpd.conf中最大连接数没有设置正确,改动后重启Apache依然如此。
最令人担忧的是居高不下的CPU占用率。

希望有在Apache下配置Discuz经验的大虾们能给一个合理的配置方案。

accept-charset与Header P3P

2009年03月20日 9:49 上午  |  分类:Develop

场景一
A网站全站均为UTF-8编码,B网站全站为GB2312编码。
A网站提供一段JS代码供B网站调用,该代码会动态生成一个FORM表单,以收集提交上来的数据。
B网站此时开始提交数据,但提交上来的中文均为乱码。
现象的产生是由于二个网站编码不一致而导致的,一般情况下使二个网站的编码一致即可。
如果无法统一编码该怎么办?

FORM有一个accept-charset属性

<form method=”post” action=”…” accept-charset=”utf-8″>

</form>

测试成功,但在IE下不成功,需要一个HACK来解决:
在form的onsubmit事件触发时动态改变document的编码,即:
onsubmit=”document.charset=’utf-8′;”

场景二
A网站提供一个页面供其它网站进行Iframe调用,该页面使用了SESSION,并进行了SESSION判断。
现象:
B网站IFRAME了A网站的页面,总显示SESSION过期,但直接在浏览器中打开该页面却又是正常的。
这是由于浏览器的安全性所致,SESSION依赖于COOKIE,A与B是二个完全不同的域,A网站没法去读取B网站下的COOKIE,所以SESSION也就失效了。
解决办法:
A网站的页面在输出头上附加一个P3P属性,值为CP=CAO PSA OUR即可。
如:

Response.AddHeader(“P3P”, “CP=CAO PSA OUR”);
if (Session[SESSIONKEY] == null)
{
//TODO:其它操作
}

Discuz中的同步登录也这样实现的

不能订阅的rss?

2009年02月2日 10:11 下午  |  分类:Develop

抱歉,想抓取的是这个rss:

http://www.achome.cn/blog/?feed=rss

使用simplexml_load_file
结果出错:

Warning: simplexml_load_file(http://www.achome.cn/blog/?feed=rss)
[function.simplexml-load-file]: failed to open stream: HTTP request failed!
HTTP/1.0 500 Internal Server Error in D:phpsitephprssfeedcheck.php on line 5

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning :
failed to load external entity “http://www.achome.cn/blog/?feed=rss”
in D:phpsitephprssfeedcheck.php on line 5

再使用file_get_contents与simplexml_load_string配合

Warning: file_get_contents(http://www.achome.cn/blog/?feed=rss) [function.file-get-contents]:
failed to open stream: HTTP request failed!
HTTP/1.0 500 Internal Server Error in D:phpsitephprssfeedcheck.php on line 3

用浏览器访问一切OK。

用.net中的HttpWebRequest

</pre>
static void Main(string[] args)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.achome.cn/blog/?feed=rss");
req.AllowAutoRedirect = true;
req.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
try
{
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
using (StreamReader r = new StreamReader(res.GetResponseStream()))
{
Console.Write(r.ReadToEnd());
}
}
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
Console.Read();
}

与PHP中同样的错误,OMG

CSS之生成内容

2008年09月9日 8:25 下午  |  分类:Develop

注:IE8以前的版本均不支持该特性
为了向文档中插入生成内容,可以使用:before与:after伪元素。

如,我想在所有链接的后面加上”(link)”,可以这样:


运行代码

也可以插入图片:


运行代码

当然,还有插入属性值:

a[href]:after{content:attr(href);}
这样会将链接的href属性写在链接之后


运行代码