排查 Linux 上Microsoft Defender for Endpoint的性能问题
适用于:
- Microsoft Defender for Endpoint 服务器版
- 服务器的Microsoft Defender
希望体验 Defender for Endpoint? 注册免费试用版。
本文介绍如何缩小与 Linux 上的 Defender for Endpoint 相关的性能问题的范围。 诊断工具可用于帮助你了解和缓解影响性能的现有资源短缺和流程。 还可以利用这些诊断工具增强Microsoft Defender门户中的可见性。 一个或多个硬件子系统中的瓶颈主要会导致性能问题,具体取决于系统上资源利用率的情况。 有时,应用程序对磁盘 I/O 资源很敏感,可能需要更多 CPU 容量,有时某些配置不可持续,并且可能会触发太多新进程,并打开过多的文件描述符。
根据正在运行的应用程序和设备特征,在 Linux 上运行 Defender for Endpoint 时,可能会遇到性能不佳的问题。 具体而言,在短时间内访问许多资源(如 CPU、磁盘和内存)的应用程序或系统进程可能会导致 Linux 上的 Defender for Endpoint 的性能问题。
警告
在开始之前, 请确保其他安全产品当前未在设备上运行。 多个安全产品可能会发生冲突并影响主机性能。
有三种不同的方法可以使用 Linux 上的 Microsoft Defender for Endpoint 诊断工具排查干扰进程和目录问题:
- 使用实时保护统计信息
- 使用热事件源
- 使用 eBPF 统计信息
使用实时保护统计信息排查性能问题
适用于:
- 仅与防病毒相关的性能问题
实时保护 (RTP) 是 Linux 上的 Defender for Endpoint 的一项功能,可持续监视和保护设备免受威胁。 它由文件和进程监视以及其他启发式方法组成。
以下步骤可用于排查和缓解这些问题:
使用以下方法之一禁用实时保护,并观察性能是否提高。 此方法有助于缩小 Linux 上的 Defender for Endpoint 是否导致了性能问题的范围。 如果设备不是由组织管理,则可以从命令行禁用实时保护:
mdatp config real-time-protection --value disabled
Configuration property updated
如果组织管理设备,则管理员可以按照 在 Linux 上设置 Defender for Endpoint 的首选项中的说明禁用实时保护。
注意
如果在关闭实时保护时性能问题仍然存在,则问题的根源可能是终结点检测和响应 (EDR) 组件。 在这种情况下,需要从防病毒和 EDR 中添加全局排除项。 在这种情况下,请按照 使用热事件源排查性能问题部分中的步骤进行作。
若要查找触发最多扫描的应用程序,可以使用 Linux 上的 Defender for Endpoint 收集的实时统计信息。
注意
此功能在版本 100.90.70 或更高版本中可用。
此功能默认在 和
InsiderFast
通道上Dogfood
启用。 如果使用的是其他更新通道,可以从命令行启用此功能:mdatp config real-time-protection-statistics --value enabled
此功能需要启用实时保护。 若要检查实时保护的状态,请运行以下命令:
mdatp health --field real_time_protection_enabled
验证条目
real_time_protection_enabled
是否为true
。 否则,请运行以下命令以启用它:mdatp config real-time-protection --value enabled
Configuration property updated
若要收集当前统计信息,请运行:
mdatp diagnostic real-time-protection-statistics --output json
注意
使用
--output json
(记下双短划线) 可确保输出格式已准备好进行分析。此命令的输出显示所有进程及其关联的扫描活动。
键入以下命令:
mdatp diagnostic real-time-protection-statistics --sort --top 4
输出是导致性能问题的前四个因素的列表。 例如,命令的输出如下所示:
===================================== Process id: 560 Name: NetworkManager Path: "/usr/sbin/NetworkManager" Total files scanned: 261 Scan time (ns): "3070788919" Status: Active ===================================== Process id: 1709561 Name: snapd Path: "/snap/snapd/23545/usr/lib/snapd/snapd" Total files scanned: 247 Scan time (ns): "19926516003" Status: Active ===================================== Process id: 596 Name: systemd-logind Path: "/usr/lib/systemd/systemd-logind" Total files scanned: 29 Scan time (ns): "716836547" Status: Active ===================================== Process id: 1977683 Name: cupsd Path: "/usr/sbin/cupsd" Total files scanned: 20 Scan time (ns): "985110892" Status: Active =====================================
若要提高 Linux 上 Defender for Endpoint 的性能,请在行下
Total files scanned
找到编号最高的一个,并为其添加防病毒排除, (仔细评估排除) 是否安全。 有关详细信息,请参阅 在 Linux 上配置和验证 Defender for Endpoint 的排除项。注意
应用程序将统计信息存储在内存中,并且仅跟踪文件活动,因为它已启动并启用实时保护。 在实时保护关闭之前或期间启动的进程不计算在内。 此外,仅对触发扫描的事件进行计数。
使用热事件源排查性能问题
适用于:
- 在整个文件系统中消耗大多数 CPU 周期的文件和可执行文件中的性能问题。
热事件源是一项功能,可让客户确定哪个进程或目录导致了资源消耗量过高。 若要调查哪个进程/可执行文件生成干扰最多,请执行以下步骤。
注意
这些命令要求你具有根权限。 确保可以使用 sudo。
首先,检查计算机上的日志级别。
mdatp health --field log_level
如果它不在“调试”中,则需要更改它,以获取有关热文件/可执行文件的详细报告。
sudo mdatp log level set --level debug
Log level configured successfully
若要收集文件) 的当前统计信息 (,
sudo mdatp diagnostic hot-event-sources files
主机上的输出如下所示, (这只是整个输出) 的代码片段。 此处,第一行显示) 出现的计数 (频率,第二行显示文件路径。
Total Events: 11179 Time: 12s. Throughput: 75.3333 events/sec.
=========== Top 684 Hot Event Sources ===========
count file path
2832 /mnt/RamDisk/postgres_data/pg_wal/0000000100000014000000A5
632 /mnt/RamDisk/postgres_data/base/635594/2601
619 /mnt/RamDisk/postgres_data/base/635597/2601
618 /mnt/RamDisk/postgres_data/base/635596/2601
618 /mnt/RamDisk/postgres_data/base/635595/2601
616 /mnt/RamDisk/postgres_data/base/635597/635610
615 /mnt/RamDisk/postgres_data/base/635596/635602
614 /mnt/RamDisk/postgres_data/base/635595/635606
514 /mnt/RamDisk/postgres_data/base/635594/635598_fsm
496 /mnt/RamDisk/postgres_data/base/635597/635610_fsm
此命令生成热事件源报告,该报表保存在本地文件夹中,可以进一步调查。 输出在 json 文件上如下所示:
{
"startTime": "1729535104539160",
"endTime": "1729535117570766",
"totalEvent": "11373",
"eventSource": [
{
"authCount": "2832",
"csId": "",
"notifyCount": "0",
"path": "/mnt/RamDisk/postgres_data/pg_wal/0000000100000014000000A5",
"pidCount": "1",
"teamId": ""
},
{
"authCount": "632",
"csId": "",
"notifyCount": "0",
"path": "/mnt/RamDisk/postgres_data/base/635594/2601",
"pidCount": "1",
"teamId": ""
}
]
}
在此示例中,我们可以看到文件 /mnt/RamDisk/postgres_data/pg_wal/0000000100000014000000A5 生成的活动最多。 同样,对于可执行文件,
sudo mdatp diagnostic hot-event-sources executables
主机上的输出如下所示。
Total Events: 47382 Time: 18s. Throughput: 157 events/sec.
=========== Top 23 Hot Event Sources ===========
count executable path
8216 /usr/lib/postgresql/12/bin/psql
5721 /usr/lib/postgresql/12/bin/postgres (deleted)
3557 /usr/bin/bash
378 /usr/bin/clamscan
88 /usr/bin/sudo
70 /usr/bin/dash
30 /usr/sbin/zabbix_agent2
10 /usr/bin/grep
8 /usr/bin/gawk
6 /opt/microsoft/mdatp/sbin/wdavdaemonclient
4 /usr/bin/sleep
这是以 json 格式保存在热事件源报告中的输出;
{
"startTime": "1729534260988396",
"endTime": "1729534280026883",
"totalEvent": "48165",
"eventSource": [
{
"authCount": "8126",
"csId": "",
"notifyCount": "0",
"path": "/usr/lib/postgresql/12/bin/psql",
"pidCount": "2487",
"teamId": ""
},
{
"authCount": "5127",
"csId": "",
"notifyCount": "0",
"path": "/usr/lib/postgresql/12/bin/postgres",
"pidCount": "2144",
"teamId": ""
}
]
}
在此示例中,在 18s 之后, 命令显示可执行文件;/usr/lib/postgresql/12/bin/psql 和 /usr/lib/postgresql/12/bin/postgres 生成的活动最多。
完成调查后,可以将日志级别更改回“信息”。
sudo mdatp log level set --level info
Log level configured successfully
若要提高 Linux 上的 Defender for Endpoint 的性能,请在 count 行中找到具有最大数目的路径,如果它是可执行) 或全局文件/文件夹排除 (添加全局进程排除 (如果它是) 的文件,则 (仔细评估排除) 是否安全。 有关详细信息,请参阅 在 Linux 上配置和验证 Defender for Endpoint 的排除项。
使用 eBPF 统计信息排查性能问题
适用于:
- 所有文件/进程事件,包括基于系统调用的性能问题。
eBPF (扩展的 Berkeley 数据包筛选器) 统计信息命令提供有关生成最多文件事件的顶级事件/进程及其 syscall ID 的见解。 从系统进行系统调用时,系统上会生成大量工作负载。 eBPF 统计信息可用于识别此类问题。
若要使用 eBPF 统计信息收集当前统计信息,请运行:
mdatp diagnostic ebpf-statistics
输出直接显示在主机上,看起来类似于以下 (这只是整个输出) 的代码片段:
Top initiator paths:
/usr/lib/postgresql/12/bin/psql : 902
/usr/bin/clamscan : 349
/usr/sbin/zabbix_agent2 : 27
/usr/lib/postgresql/12/bin/postgres : 10
Top syscall ids:
80 : 9034
57 : 8932
60 : 8929
59 : 4942
112 : 4898
90 : 179
87 : 170
119 : 32
288 : 19
41 : 15
此命令监视系统 20 秒并显示结果。 此处顶部的发起程序路径 (postgresql/12/bin/psql) 显示生成最多系统调用的进程的路径。
若要提高 Linux 上的 Defender for Endpoint 的性能,请找到行中Top initiator path
最高的count
一个,并为其添加全局进程排除, (仔细评估排除) 是否安全。 有关详细信息,请参阅 在 Linux 上配置和验证 Defender for Endpoint 的排除项。
配置全局排除项以提高性能
在 Linux 上配置Microsoft Defender for Endpoint,其中包含导致性能问题的进程或磁盘位置的排除项。 有关详细信息,请参阅 并验证 Microsoft Defender for Endpoint 在Linux上的排除。 如果仍然遇到性能问题,请联系支持人员以获取进一步的说明和缓解措施。
另请参阅
提示
想要了解更多信息? Engage技术社区中的Microsoft安全社区:Microsoft Defender for Endpoint技术社区。