我该如何实现我的网站有更好的表现 [英] How do I achieve a better performance of my website
问题描述
海兰有!
我在Windows 2008服务器上运行的IIS7。结果
在偷看时候,我们有以下行为:
- CPU负载空闲附近
- 请求得到排队(与资源监视器监控)
- Exeuction时间获得超过10秒
的 1-4)请参阅previous版本和修改的
5)做的东西异步
的建议,我创建了一个简单的网页...一个页面...这个codebehind:
使用系统;
使用的System.Threading;
使用的System.Web;
使用System.Web.UI程序;命名空间PerformanceTest
{
公共部分类AsyncPage:页
{
保护覆盖无效的OnInit(EventArgs的发送)
{
base.OnInit(E); VAR pageAsyncTask =新PageAsyncTask(this.BeginAsyncOperation,this.EndAsyncOperation,this.TimeoutAsyncOperation,NULL);
this.RegisterAsyncTask(pageAsyncTask);
// 要么
//this.AddOn$p$pRenderCompleteAsync(this.BeginAsyncOperation,this.EndAsyncOperation); //这可能是做清理或某事一样有用
这preRenderComplete + =手柄preRenderComplete;
} 私人无效手柄preRenderComplete(对象发件人,EventArgs的发送)
{
this.Trace.Write(处理preRenderComplete);
this.Trace.Write(的String.Format(managedThreadId#{0},Thread.CurrentThread.ManagedThreadId));
} 私人委托无效睡眠(INT毫秒); 私人IAsyncResult的BeginAsyncOperation(对象发件人,EventArgs的,的AsyncCallback的AsyncCallback,对象状态)
{
this.Trace.Write(BeginAsyncOperation);
this.Trace.Write(的String.Format(managedThreadId#{0},Thread.CurrentThread.ManagedThreadId)); VAR睡眠=新睡眠(Thread.sleep代码);
返回sleep.BeginInvoke(1000,的AsyncCallback,状态);
} 私人无效EndAsyncOperation(IAsyncResult的asyncResult)
{
this.Trace.Write(EndAsyncOperation);
this.Trace.Write(的String.Format(managedThreadId#{0},Thread.CurrentThread.ManagedThreadId));
} 私人无效TimeoutAsyncOperation(IAsyncResult的asyncResult)
{
this.Trace.Write(TimeoutAsyncOperation);
this.Trace.Write(的String.Format(managedThreadId#{0},Thread.CurrentThread.ManagedThreadId));
}
}
}
好像也不错,不是吗?其实这改变不了什么,因为强调需要超过30秒,响应时间上升到8秒,CPU占用率接近0%。
6)更新的machine.config
< system.net>
< connectionManagement>
<添加地址=*MAXCONNECTION =12/>
< / connectionManagement>
< /system.net>
<&的System.Web GT;
<中processModel AUTOCONFIG =真
maxWorkerThreads =100
maxIoThreads =100
minWorkerThreads =50
minIoThreads =50/>
<的httpRuntime minFreeThreads =88
minLocalRequestFreeThreads =76/>< /system.web>
<一个href=\"http://geekswithblogs.net/StuartBrierley/archive/2009/09/30/tuning-iis---machine.config-settings.aspx\" rel=\"nofollow\">http://geekswithblogs.net/StuartBrierley/archive/2009/09/30/tuning-iis---machine.config-settings.aspx
Hy there!
I'm running IIS7 on a Windows 2008 server.
On peek times we have following behaviour:
- CPU load is near idle
- Requests get queued (monitored with Resource Monitor)
- Exeuction time gets over 10sec
1-4) Please see previous versions and edits
5) Doing stuff async
As suggested, I've created a simple web ... one page ... with this codebehind:
using System;
using System.Threading;
using System.Web;
using System.Web.UI;
namespace PerformanceTest
{
public partial class AsyncPage : Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
var pageAsyncTask = new PageAsyncTask(this.BeginAsyncOperation, this.EndAsyncOperation, this.TimeoutAsyncOperation, null);
this.RegisterAsyncTask(pageAsyncTask);
// or
//this.AddOnPreRenderCompleteAsync(this.BeginAsyncOperation, this.EndAsyncOperation);
// this might be useful for doing cleanup or sth alike
this.PreRenderComplete += HandlePreRenderComplete;
}
private void HandlePreRenderComplete(object sender, EventArgs e)
{
this.Trace.Write("HandlePreRenderComplete");
this.Trace.Write(string.Format("managedThreadId #{0}", Thread.CurrentThread.ManagedThreadId));
}
private delegate void Sleep(int miliseconds);
private IAsyncResult BeginAsyncOperation(object sender, EventArgs e, AsyncCallback asyncCallback, object state)
{
this.Trace.Write("BeginAsyncOperation");
this.Trace.Write(string.Format("managedThreadId #{0}", Thread.CurrentThread.ManagedThreadId));
var sleep = new Sleep(Thread.Sleep);
return sleep.BeginInvoke(1000, asyncCallback, state);
}
private void EndAsyncOperation(IAsyncResult asyncResult)
{
this.Trace.Write("EndAsyncOperation");
this.Trace.Write(string.Format("managedThreadId #{0}", Thread.CurrentThread.ManagedThreadId));
}
private void TimeoutAsyncOperation(IAsyncResult asyncResult)
{
this.Trace.Write("TimeoutAsyncOperation");
this.Trace.Write(string.Format("managedThreadId #{0}", Thread.CurrentThread.ManagedThreadId));
}
}
}
Seems quite good, doesn't it? Actually it changes nothing, as stressing for more than 30 seconds, response time goes up to 8 seconds with CPU usage near 0%.
6) Updated machine.config
<system.net>
<connectionManagement>
<add address="*" maxconnection="12" />
</connectionManagement>
</system.net>
<system.web>
<processModel autoConfig="true"
maxWorkerThreads="100"
maxIoThreads="100"
minWorkerThreads="50"
minIoThreads="50" />
<httpRuntime minFreeThreads="88"
minLocalRequestFreeThreads="76" />
</system.web>
这篇关于我该如何实现我的网站有更好的表现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!