散分了,顺便提问:ASP.NET服务器发生“Server is Too Busy”错误及响应很慢一般怎么解决?

DragonFly-9 2008-05-15 03:31:24
ASP.NET服务器经常发生“Server is Too Busy”及响应很慢一般怎么解决?

附:招聘.NET开发人员[北京海淀区]
工作职责
1. 能够独立完成项目、产品规划与设计。
2. 按照项目要求保质保量的完成开发任务。
3. 能够独立完成技术相关文档(如项目计划文档、需求文档、设计文档、测试文 档等)。

应聘要求
1、熟悉dotNet(visual studio.net 2003/2005)开发平台,精通ASP.NET(C#) WEB开发。
2、本科及以上学历,三年及以上工作经验,能力达到职位要求可适当放宽条件。
3、为人诚信,勤奋,工作责任心强,能承受紧张的工作压力。
4、有产品开发经验的优先

有意请发Email:jieyf@163.com
...全文
339 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxdxy 2008-05-16
  • 打赏
  • 举报
回复
负载群集就是win2003自带的组件
zxcvbnm_1980 2008-05-16
  • 打赏
  • 举报
回复
可以聊聊,基本达到楼主的要求
anheizhizi 2008-05-16
  • 打赏
  • 举报
回复
北京好远哦。。。
gaoyipu 2008-05-16
  • 打赏
  • 举报
回复
jf
yjwang0621 2008-05-16
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 songsu 的回复:]
一般情况而言,你服务器压力大了。考虑均衡负载吧。
[/Quote]

借楼主个地方问问 什么是均衡负载
gaohaibin1 2008-05-16
  • 打赏
  • 举报
回复
ding
songsu 2008-05-16
  • 打赏
  • 举报
回复
一般情况而言,你服务器压力大了。考虑均衡负载吧。
财富实验室 2008-05-16
  • 打赏
  • 举报
回复
too busy!
liyin_liu 2008-05-16
  • 打赏
  • 举报
回复
jf
skyaspnet 2008-05-16
  • 打赏
  • 举报
回复
是否过多使用cache,session等服务器资源?

数据库资源释放是否及时?
周公 2008-05-16
  • 打赏
  • 举报
回复
看看程序代码,有没有死循环。
看看程序中有关非托管资源(比如文件操作、数据库操作)有没有及时释放。
看看程序中有没有滥用某些特性(比如什么东西都向Application中保存)。
检查服务器性能是不是太低。
xuan.ye 2008-05-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tiancaolin 的回复:]
压力过大。导致访问拒绝
[/Quote]
datahandler2 2008-05-16
  • 打赏
  • 举报
回复
压力过大。导致访问拒绝
No1bigtooth 2008-05-16
  • 打赏
  • 举报
回复
fj
超级大笨狼 2008-05-16
  • 打赏
  • 举报
回复
提高ASPX服务器性能的几大狠招

∆ 第0招依靠测试工具,以下根据ACT test测试结果,整理。【全部招数凶狠度的依据】

所谓性能优化,必须是建立在测试的基础之上的,ACT Test是比较爽的测试工具,比Load Runner方便,比Web Stress直观,支持脚本编程和录制登陆到注销全过程。
所有优化都要进行对比测试,才是评判的数字依据。
所以,个人认为:不做压力测试,优化是可以做,但是没数据支持,是不严谨的。


∆ 第一招生成静态。【凶狠度排名第一:性能RPS提升两个数量级(提高速度百倍)】

以下是截取Response的Stream生成文件的代码
protected override void Render(HtmlTextWriter writer)
{
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
base.Render(htmlTextWriter);

if (本页允许生成静态HTML)
{
//根据aspx的get参数构造出的HTML文件名,如:aaa.aspx?id=1 转化成 aaa_id_1.html
string filePath = Server.MapPath(htmlFileName);

StreamWriter streamWriter = new StreamWriter(filePath , false, Encoding.UTF8);

streamWriter.Write(HTML);

streamWriter.Close();

htmlTextWriter.Close();
}
}
生成后,以后先判断是否有这个文件,如果有就跳过去。
本页允许生成静态HTML,可以在后台做一个钩选和更新,并且在内容发生变化后删除静态HTML。

∆ 第二招,图片文件分流服务器。【凶狠度排名第二:性能RPS提升1个数量级(提高速度十倍)】


1,web 1台或多台。
2,图片1台或多台。
3,文件1台或多台。
4,数据库1台或多台。
不同机房要采用Remoting分发文件是个不错的主义,就是工作量大。
以下是同机房多服务器之间可以通过web读写分发文件的关键代码。


using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.IO;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Security.Principal;
using System.Runtime.InteropServices;

namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;

WindowsImpersonationContext impersonationContext;

[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
public static extern int LogonUser(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public extern static int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);
private bool impersonateValidUser(String userName, String domain, String password)
{

IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;

if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
WindowsIdentity tempWindowsIdentity;
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
return true;
else
return false;
}
else
return false;
}
else
return false;
}
private void undoImpersonation()
{
impersonationContext.Undo();//回退为未更改前账户
}
protected void Page_Load(object sender, EventArgs e)
{
//临时更改为 跟 网络硬盘相同用户名密码的账户(此账户必须在网络盘有写入权限)本机也需要同样帐号密码的帐户
if (impersonateValidUser("administrator", "192.168.1.102", "kuqu123456"))
{
Response.Write(System.IO.File.Exists(@"\\192.168.1.102\share\C#高级编程\C#高级编程(第四版).pdf"));
undoImpersonation();
}
else
{
Response.Write("登陆失败");
}

}
}
}

∆ 第三招,各种缓存。【凶狠度排名第三:性能RPS提升1个数量级(提高速度十倍级别)】

缓存代码好找,就不写了,道理不用多讲。


∆ 第四招,减少数据库往返。【凶狠度排名第四:性能RPS提升和往返次数有关】
能一次取的数据,就不要多次,尤其在绑定的行里多次执行存储过程。

∆ 第五招,少用对象。【凶狠度排名第五:性能RPS提升取决于对象数量】

用Static函数执行SQL,绑定数据或者增删查改,来代替 new一堆对象去绑定List或者设置属性。

∆ 第六招,多用Ajax和客户端HTML代码,少用服务器控件,减少刷新和ViewState。【凶狠度排名第六:性能RPS提升取决于具体界面功能】

道理不用多讲,服务器控件垃圾比较多。

∆ 第七招,采用好的数据结构容器和算法。。【凶狠度排名第七:性能提升取决于算法复杂度,普通Web开发这种情况不多见,但是特殊开发要重视!~~】
哈希类性能最好,查找复杂度是O(1),例如:Dictionnary<T,T>,
二叉树查找复杂度是O(Log n),排序O(n*Log n),List和ArraList自带的排序速度是接近(n*Log n),
数组类的线性查找O(n),如果你用冒泡排序O(n*n),那么你不是优秀程序员。
StringBuilder 性能好于 string+=,不过提升的有限,不是本质的数量级别的提升。

其他招数,欢迎补充排名。



超级大笨狼 2008-05-16
  • 打赏
  • 举报
回复
服务器功能分开
1,web 1台或多台。
2,图片1台
3,文件1台
4,数据库1台

我们现在就是这样做的,设置服务器之间可写的web权限,代码见:
http://topic.csdn.net/u/20080320/16/3e89e70d-e929-44ed-ac93-83c94d75d0f7.html
andyhooo 2008-05-16
  • 打赏
  • 举报
回复
日志看看.
yunfeng007 2008-05-16
  • 打赏
  • 举报
回复
看来是个招聘贴...
hb0513 2008-05-16
  • 打赏
  • 举报
回复
项目优化吧
weibj666 2008-05-16
  • 打赏
  • 举报
回复
接分
加载更多回复(13)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧