环境:
用户正在他的客户端PC上启动应用程序
应用程序正在连接到应用程序服务器并在服务器上启动进程
用户正在做一些应用程序在客户端PC崩溃的事情
应用程序服务器上的进程仍以100%cpu使用率运行
问题:
是否可以将应用程序服务器上的运行进程检测为僵尸进程? "僵尸"进程仍在响应。 有没有办法从" zombie"中获取端口和IP地址?所以我可以在特定端口ping客户端。
我只是不知道在哪里需要搜索来识别它,因为这个过程可以100%并不意味着它是一个僵尸进程。也许用户正在做一些真实的事情。我只需要100%安全的方式,我就不能杀死它们并希望它是一个僵尸。这可能会对公司造成巨大损害。
答案 0 :(得分:0)
我找到了一个解决方案,我认为这是最好的方法。
我分析了一个“死”进程和一个常规进程,区别在于,活动进程至少有4个TCP连接而死进程只有2个。 活着的过程=客户 - > Applicationserver - >数据库服务器 死进程=应用程序服务器 - > DATABASESERVER
所以实际上我正在检索所有tcp连接,通过Linq和group by过滤它们,以便得到死进程。
代码:
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();