Java堂  


Windows NT系统下的Apache性能优化

归档在: Web&Server — Jet @ 3:08 上午
Tags: ,
原文出处: http://www.javatang.com/archives/2008/02/19/0801260.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

一般来说,WinNT系统下使用IIS,而Apache在Linux下应用的比较多,但是依然有很多人在WinNT系统下使用Apache而非IIS,可能是基于对Windows系统的熟悉吧。今天就来说一下在Windows系统下如果优化Apache的性能。

mpm_winnt.c是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。

mpm_winnt主要通过ThreadsPerChild和MaxRequestsPerChild两个参数来优化Apache,下面详细来说明一下。

ThreadsPerChild
这个参数用于设置每个进程的线程数, 子进程在启动时建立这些线程后就不再建立新的线程了. 一方面因为mpm_winnt不能启动多个进程, 所以这个数值要足够大,以便可以处理可能的请求高峰; 另一方面该参数以服务器的响应速度为准的, 数目太大的反而会变慢。因此需要综合均衡一个合理的数值。

mpm_winnt上的默认值是64, 最大值是1920. 这里建议设置为100-500之间,服务器性能高的话值大一些,反之值小一些。

MaxRequestsPerChild
该参数表示每个子进程能够处理的最大请求数, 即同时间内子进程数目.设置为零表示不限制, mpm_winnt上的默认值就是0.

官方参考手册中不建议设置为0, 主要基于两点考虑: (1) 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存; (2) 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

因此这个参数的值更大程度上取决于服务器的内存,如果内存比较大的话可以设置为0或很大的数字,否则设置一个小的数值。需要说明的是,如果这个值设置的太小的话会造成Apache频繁重启,在日志文件中会看到如下的文字:

Process exiting because it reached MaxRequestsPerChild. Signaling the parent

这样一来降低了Apache的总体性能。

另外,可以通过查看Apache提供的server-status(状态报告)来验证当前所设置数值是否合理,在httpd.conf文件中做如下设置来打开它:

  1. # 首先需要加载mod_status模块
  2. LoadModule status_module modules/mod_status.so
  3.  
  4. # 然后设置访问的地址
  5. <Location /server-status>
  6.     SetHandler server-status
  7.     Order deny,allow
  8.     Deny from all
  9.     # 如果限制某个IP访问则设置为 Allow from 192.168.1.1
  10.     Allow from all
  11. </Location>

综合来说,因为Windows NT下Apache只能启动父子两个进程,因此只能通过增大单个进程的线程数以及单个进程能够处理的最大请求数来进行优化。其他优化的参数同Linux系统下是一样的,大家可以加以参考。下面针对上述两个参数给出一个建议的设置:

  1. <IfModule mpm_winnt.c>
  2.   ThreadsPerChild 250
  3.   MaxRequestsPerChild 5000
  4. </IfModule>

参考资料:
Apache参考手册
Apache模块 mod_status

Windows任务栏出现多个相同栏的解决方法

归档在: OS — Jet @ 2:17 下午
Tags: ,
原文出处: http://www.javatang.com/archives/2007/05/30/1755165.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

今天朋友的电脑(系统是Windows XP)出现一个非常奇怪的现象:打开应用程序的时候在任务栏中出现两个相同的图标列表,而且拖动也删除不掉。比如打开“我的电脑”之后会发现在任务栏上“我的电脑”的图标左边右边各出现一个。后来在网上找了一些资料,终于找到了解决的方法。

打开“Windows任务管理器”(同时按下按下 Ctrl+Alt+Del 键或Ctrl+Shift+Esc 键),选择“进程”标签关闭所有的 explorer.exe 和 iexplore.exe 进程。这个时候电脑中只显示任务管理器程序了。

接下来切换到“应用程序”标签,点击下面的“新任务”按钮,在打开文本框中输入“regedit”打开注册表。找到并删除以下三个项目(包含其下的所有键):

  1. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\explorer\StuckRects2
  2. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\explorer\Streams
  3. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\explorer\StreamsMRU

然后关闭注册表编辑器,单击任务管理器上的“关机”-“重新启动”菜单重启电脑之后就可以了。

另外在Windows XP新闻组上写了一个vbs脚本文件,可以直接处理上面的操作,内容如下:

  1. 'xp_taskbar_desktop_fixall.vbs - Repairs the Taskbar when minimized programs don't show.
  2. '?Kelly Theriot and Doug Knox - 8/22/2003
  3. '翻译:Smallfrogs。翻译内容:将英文提示改为简体中文
  4. '来源:Microsoft Windows XP NewsGroup
  5.  
  6. Set WSHShell = WScript.CreateObject("WScript.Shell")
  7. Message = "本脚本用于修复Windows XP中当最小化程序时,无法在任务栏显示图标的问题。"& vbCR & vbCR
  8. Message = Message & "为了正常工作,本脚本将关闭和重启 Windows Explorer 外壳,这个操作不会损坏你的系统。" & vbCR & vbCR
  9. Message = Message & "请关闭所有杀毒软件的实时监控!并保存所有打开的文件。"& vbCR & vbCR
  10. Message = Message & "是否继续?"
  11.  
  12. X = MsgBox(Message, vbYesNo+vbExclamation, "注意")
  13.  
  14. If X = 6 Then
  15.  
  16. On Error Resume Next
  17.  
  18. WshShell.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2\"
  19. WshShell.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\StreamsMRU\"
  20. WshShell.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktop\"
  21. WshShell.RegDelete "HKCU\Software\Microsoft\Internet Explorer\Explorer Bars\{32683183-48a0-441b-a342-7c2a440a9478}\BarSize"
  22.  
  23. P1 = "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\"
  24.  
  25. WshShell.RegWrite p1 & "NoBandCustomize", 0, "REG_DWORD"
  26. WshShell.RegWrite p1 & "NoMovingBands", 0, "REG_DWORD"
  27. WshShell.RegWrite p1 & "NoCloseDragDropBands", 0, "REG_DWORD"
  28. WshShell.RegWrite p1 & "NoSetTaskbar", 0, "REG_DWORD"
  29. WshShell.RegWrite p1 & "NoToolbarsOnTaskbar", 0, "REG_DWORD"
  30. WshShell.RegWrite p1 & "NoSaveSettings",0,"REG_DWORD"
  31. WshShell.RegWrite p1 & "NoToolbarsOnTaskbar", 0, "REG_DWORD"
  32. WshShell.RegWrite p1 & "NoSetTaskbar",0,"REG_DWORD"
  33. WshShell.RegWrite p1 & "NoActiveDesktop",0,"REG_DWORD"
  34. WshShell.RegWrite p1 & "ClassicShell",0,"REG_DWORD"
  35.  
  36. p1 = "HKCU\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\LocalUser\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\"
  37.  
  38. WshShell.RegWrite p1 & "NoCloseDragDropBands", 0, "REG_DWORD"
  39. WshShell.RegDelete p1 & "NoMovingBands"
  40.  
  41. p1 = "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell"
  42.  
  43. WshShell.RegWrite p1, "explorer.exe", "REG_SZ"
  44.  
  45. p1 = "HKCU\Software\Microsoft\Internet Explorer\Explorer Bars\{32683183-48a0-441b-a342-7c2a440a9478}\"
  46. WshShell.RegDelete p1 & "BarSize"
  47. WshShell.RegWrite p1, "Media Band", "REG_SZ"
  48.  
  49. On Error Goto 0
  50.  
  51. For Each Process in GetObject("winmgmts:"). _
  52. ExecQuery ("select * from Win32_Process where name='explorer.exe'")
  53.   Process.terminate(0)
  54. Next
  55.  
  56. MsgBox "完成!" & vbcr & vbcr & "?Kelly Theriot and Doug Knox", 4096, "完成"
  57.  
  58. Else
  59.  
  60. MsgBox "没有对你的系统进行任何改变。" & vbcr & vbcr & "?Kelly Theriot and Doug Knox", 4096, "用户取消了"
  61.  
  62. End If

最后需要说明的是:上述的方法不仅解决开始所描述的问题,而且还可以解决各种任务栏工作不正常的情况,比如:任务栏不显示正在运行的程序的图标,或者在任务栏上总是出现重复的图标等等。

参考资料:
http://gaozhongliang328.blog.163.com/blog/static/9853949200722910502867

XP中局域网不能访问的解决办法

归档在: OS — Jet @ 10:02 下午
原文出处: http://www.javatang.com/archives/2007/03/19/0206139.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

局域网中XP系统的机器可以访问2000或98系统的机器,但是2000或98系统的机器无法访问XP系统的机器;或者两台XP系统的机器都无法访问但是可以ping的通。这种情况下多半是因为XP默认情况下在“安全策略”中限制了Guest用户访问局域网的权限。

解决方法如下:
在“控制面板”-“管理工具”中打开“本地安全策略”,然后打开“本地策略”中的“用户权利指派”,找到“拒绝从网络访问这台计算机”双击打开,删除guest选项,然后依次保存退出即可。

XP中的“安全”选项卡在哪里?

归档在: OS — Jet @ 5:15 下午
原文出处: http://www.javatang.com/archives/2007/03/04/1543107.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

经常在XP中调试asp程序,有的时候会出现编号为0×80040E09的错误,主要是提示数据库不可操作。如果系统为2000或2003可以很方便在“安全”选项卡中设置用户权限,但是XP中找不到这个选项。

后来查了一下原来XP中默认情况下使用了“使用简单共享”模式,这个模式下隐藏了“安全”选项卡。只要在“文件夹选项”中将“使用简单共享(推荐)”选项去掉就可以了。

参考资料:
百度知道

Windows Update产生的“0×8007045A”错误及解决方法

归档在: OS — Jet @ 10:34 上午
原文出处: http://www.javatang.com/archives/2007/02/15/3405101.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

今天在Windows Update过程中产生“0×8007045A”错误,如下图所示:
ox8007045a.png

后来查了一下原来是因为本机中的system32目录下面的msxml3.dll、msxml3a.dll和msxml3r.dll损坏而造成的,从另外一台机器上复制了三个文件覆盖到system32下面即可。覆盖的时候可能会有文件正在使用的提示,只要将explore进程关闭然后在cmd中拷贝就可以了。

除了在其他机器中拷贝这三个文件还可以在http://www.dll-files.com网站上搜索下载,不过我没有在上面搜索到msxml3r.dll这个文件。:( 不过后来在国内一个类似的网站(http://www.dll321.com)上找到了最后一个文件 :P

参考资料:
Windows Update故障再探

微软正版认证离线安装包

归档在: OS — Jet @ 4:12 下午
原文出处: http://www.javatang.com/archives/2006/12/28/125286.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

现在不管Windows还是Office在更新的时候都需要经过一个正版验证,本来没什么感觉的一个过程但是遇到网速不是很快的时候就很郁闷了。好在有人专门做了个离线安装的程序来解决这个问题,的确是不错。 :)

软件名称:【微软正版认证离线安装包】
版 本:build 2006.12.24
软件大小:2.6 MB
软件语言:简体中文
软件类别:免费软件 / 系统辅助
运行环境:WinXP、Win2003, Win2000
发布时间:2006-12-24
作 者:xunchi,没有版权,随意传播!
下载:http://www.51files.com/?G2OCRWALKBQ5AC8

参考资料:
http://www.huaidan.org/blog/article.asp?id=804