语境

语境

语境

我在工作中使用并管理* Windows 服务器。它用于最多 5 个用户通过 RDP 同时进行常规计算。该服务器有 128GB 的​​ RAM,足以满足我们在其上进行的工作(主要是 Python 和 MATLAB 中的数据整理)。但是,由于用户脚本中的错误(例如错误的数组初始化、忘记删除变量),其中一个进程有时会占用几乎所有内存。

发生这种情况时,所有 RDP 连接都会断开,服务器将无法控制,直到内存使用量减少或服务器重新启动。后者是最后的手段,因为这会导致所有用户的数据丢失。我不确定在发生这种“崩溃”之前确切的内存阈值是多少,但它在 97% 左右。

我尝试过的事情

有效的命令

当服务器负载很重时,我仍然可以通过以下命令获得响应

  • ping:正常工作
  • tasklist /s servername:返回数据,但速度很慢。它确实允许我找到有问题的 PID 和会话 ID。
  • Enter-PSSession servername:有效,但要过很长时间才能开始会话

无效的命令

我尝试了下面的命令来终止有问题的进程并重新获得控制权。不幸的是,这些命令在 10-15 分钟内都没有起作用。

  • taskkill /s servername /pid pid /f:不执行任何操作,并在 10-15 分钟后停止,并显示有关内部错误的消息

  • pskill \\servername pid:不执行任何操作,手动停止

  • logoff sessionID /server:servername:不执行任何操作,手动停止

  • shutdown /m \\servername /r /f:返回

    输入的计算机名称无效或目标计算机不支持远程关机

    事实并非如此,因为当服务器没有过载时该命令才有效。

问题

当服务器内存占用约为 97% 且不响应上述命令时,如何快速终止占用内存的进程?

* 公司 IT 负责总体管理服务器,但我负责管理定期更新、用户管理和软件安装。

答案1

这听起来像是内存泄漏,需要通过更新有问题的软件来诊断/解决。

在此之前,您可以尝试一些方法来控制它。

如果您已确定问题的根源,则可以设置以 SYSTEM 身份运行的计划任务,以最小干扰的间隔/时间终止/重新启动有问题的进程/服务。

最近,在处理由我们的防病毒产品导致内存不足的类似情况时,我还注意到远程管理工具无法连接。在运行 SCCM 或 SCOM 等产品时,您仍然可以通过这些代理传递命令。

另一个可行的选择是使用 Win32_Process 类上的 PowerShell Get-WmiObject Terminate() 方法来终止远程进程。

有一篇很棒的文章演示了如何使用 WMI 来实现这一点这里

相关内容