C# 识别响应僵尸进程
C# Identify responding zombie process
环境:
用户正在其客户端 PC 上启动应用程序
应用程序正在连接到应用程序服务器并在服务器上启动进程
用户正在做一些事情,应用程序在客户端 PC 上崩溃
应用服务器的进程仍然运行100%cpu使用率
问题:
是否可以将应用服务器上的运行进程检测为僵尸进程? "zombie" 进程仍在响应。
有没有办法从 "zombie" 获取端口和 IP 地址?所以我可能可以在特定端口 ping 客户端。
我只是不知道我需要在哪里搜索才能识别它,因为进程可以占用 100% 并不意味着它是僵尸进程。也许用户正在做一些真实的事情。我只需要一个 100% 安全的方法,我就是不能杀死他们,希望那是僵尸。这会给公司造成巨大的损失。
我找到了一个解决方案,我认为这是最好的方法。
我分析了一个"dead"进程和一个普通进程,区别是alive进程至少有4个TCP连接,dead进程只有2个。
活动进程 = 客户端 -> 应用程序服务器 -> 数据库服务器
死进程 = 应用程序服务器 -> 数据库服务器
所以实际上我正在检索所有 tcp 连接,通过 Linq 过滤它们并分组,以便获得死进程。
代码:
List<TcpProcessRecord> processes = Tcp.GetAllTcpConnections();
var filteredAnonType = processes.Where(n => n.ProcessName.ToLower().StartsWith(Properties.Settings.Default.ProcessToMonitor.ToLower()))
.GroupBy(x => x.ProcessId).Select(group => new
{
NumberConnections = group.Select(t => t.RemoteAddress).Distinct().Count(),
ProcessID = group.Key,
}).Where(v => v.NumberConnections < Properties.Settings.Default.MinimumConnections);
List<ProcessZombie> filteredProcesses = (from zombie in filteredAnonType
select new ProcessZombie(zombie.NumberConnections, zombie.ProcessID)).ToList();
环境:
用户正在其客户端 PC 上启动应用程序
应用程序正在连接到应用程序服务器并在服务器上启动进程
用户正在做一些事情,应用程序在客户端 PC 上崩溃
应用服务器的进程仍然运行100%cpu使用率
问题:
是否可以将应用服务器上的运行进程检测为僵尸进程? "zombie" 进程仍在响应。 有没有办法从 "zombie" 获取端口和 IP 地址?所以我可能可以在特定端口 ping 客户端。
我只是不知道我需要在哪里搜索才能识别它,因为进程可以占用 100% 并不意味着它是僵尸进程。也许用户正在做一些真实的事情。我只需要一个 100% 安全的方法,我就是不能杀死他们,希望那是僵尸。这会给公司造成巨大的损失。
我找到了一个解决方案,我认为这是最好的方法。
我分析了一个"dead"进程和一个普通进程,区别是alive进程至少有4个TCP连接,dead进程只有2个。 活动进程 = 客户端 -> 应用程序服务器 -> 数据库服务器 死进程 = 应用程序服务器 -> 数据库服务器
所以实际上我正在检索所有 tcp 连接,通过 Linq 过滤它们并分组,以便获得死进程。
代码:
List<TcpProcessRecord> processes = Tcp.GetAllTcpConnections();
var filteredAnonType = processes.Where(n => n.ProcessName.ToLower().StartsWith(Properties.Settings.Default.ProcessToMonitor.ToLower()))
.GroupBy(x => x.ProcessId).Select(group => new
{
NumberConnections = group.Select(t => t.RemoteAddress).Distinct().Count(),
ProcessID = group.Key,
}).Where(v => v.NumberConnections < Properties.Settings.Default.MinimumConnections);
List<ProcessZombie> filteredProcesses = (from zombie in filteredAnonType
select new ProcessZombie(zombie.NumberConnections, zombie.ProcessID)).ToList();