我该如何实现我的网站有更好的表现 [英] How do I achieve a better performance of my website

查看:134
本文介绍了我该如何实现我的网站有更好的表现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

海兰有!

我在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>

解决方案

http://geekswithblogs.net/StuartBrierley/archive/2009/09/30/tuning-iis---machine.config-settings.aspx

这篇关于我该如何实现我的网站有更好的表现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆