排查 Linux 上Microsoft Defender for Endpoint的性能问题

适用于

希望体验 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 的一项功能,可持续监视和保护设备免受威胁。 它由文件和进程监视以及其他启发式方法组成。

以下步骤可用于排查和缓解这些问题:

  1. 使用以下方法之一禁用实时保护,并观察性能是否提高。 此方法有助于缩小 Linux 上的 Defender for Endpoint 是否导致了性能问题的范围。 如果设备不是由组织管理,则可以从命令行禁用实时保护:

    mdatp config real-time-protection --value disabled
    
    Configuration property updated
    

    如果组织管理设备,则管理员可以按照 在 Linux 上设置 Defender for Endpoint 的首选项中的说明禁用实时保护。

    注意

    如果在关闭实时保护时性能问题仍然存在,则问题的根源可能是终结点检测和响应 (EDR) 组件。 在这种情况下,需要从防病毒和 EDR 中添加全局排除项。 在这种情况下,请按照 使用热事件源排查性能问题部分中的步骤进行作。

  2. 若要查找触发最多扫描的应用程序,可以使用 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 (记下双短划线) 可确保输出格式已准备好进行分析。

    此命令的输出显示所有进程及其关联的扫描活动。

  3. 键入以下命令:

    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技术社区