我的服务器出现了一个非常严重的问题。我们的服务器之前运行速度非常快。但是这周,它变得越来越慢。每天下午,w3wp 进程都会停止,我们无法再次连接到 SharePoint。当没有人使用 SharePoint 服务器时,我们监控该进程,发现内存使用量越来越大。然后我们检查 SharePoint 日志,发现存在内存泄漏。我想知道,如何确定内存泄漏的原因?以及服务器变得越来越慢的原因是什么?
此致,
答案1
您是否编写过自己的 Web 部件、工作流或事件?
如果是这样,请运行 SPDisposeCheck 工具来帮助您检查使用 SharePoint API 的程序集,以便正确处理内存
code.msdn.microsoft.com/SPDisposeCheck
或者
本周您是否安装了任何更新,请检查控制面板?
答案2
每天下午同一时间?看看你在那个时间安排了哪些作业……也许明天禁用所有作业,看看情况是否有所改善。无论如何,你必须缩小导致问题的组件范围。
答案3
另外,检查任务管理器,看看 csrss.exe 进程是否占用了超过 90% 的 CPU。MS 中有一个记录在案的错误,如果用户帐户损坏,它就会旋转。修复是一种“非修复”,因为它涉及永久删除您可能无法正确备份的内容!以下是 Microsoft 的 MSDN 站点的链接:
“csrss 代表‘客户端/服务器运行时子系统’。
这是 Win32 子系统的用户模式部分(Win32.sys 是内核模式部分)。Csrss 是一个必须始终运行的重要子系统。Csrss 负责控制台窗口、创建和/或删除线程以及 16 位虚拟 MS-DOS 环境的某些部分。”
参考
答案4
首先使用性能计数器检查 w3wp.exe 和 owstimer.exe 进程使用的内存。这些进程是唯一应该与 SharePoint 相关。(有这里有很多柜台但将它们全部一起使用可能不会有太大帮助。
确认问题出在这些进程之一后,请验证问题是否是 .NET 代码中的内存泄漏。特别是 # Gen 2 Collections 监视器很可能表明内存未被释放。有一个这里有其他监视器的良好总结。
最后,检查哪些自定义代码正在泄漏内存。正如 Chris 提到的,检测检查是检查内存是否正确处置的一种非常好的方法。您可以针对特定的自定义 DLL 运行它,并很快找到罪魁祸首。请注意,有时它会给出误报,但绝不会给出漏报。