Files
Inbox/系统基座文件/1/1.1/1.1.4 系统级资源限制 (System Resource Limits).md
2025-12-11 07:24:36 +08:00

5.6 KiB
Raw Blame History

tags, date created, date modified
tags date created date modified
星期三, 十一月 19日 2025, 3:57:04 下午 星期三, 十一月 19日 2025, 4:02:26 下午

1.1.4 系统级资源限制 (System Resource Limits)

1. 进程级资源配额 (Process Limits / ulimit)

  • 关键性P0

  • 信息解析

    • 关键风险点max locked memory (锁定内存) 仅为 64KB。这是致命配置。雷达实时程序必须通过 mlock() 锁定物理内存以防止被 Swap 换出。此限制会导致锁定失败进而引发不可控的缺页中断Page Fault破坏实时性。
    • 有利配置open files (文件句柄) 已达 524288core file sizeunlimited,这有利于高并发 Socket 通信和崩溃现场保留。
    • 注意点stack size8192KB (8MB)。对于深度递归或在栈上分配大型矩阵的 DSP 算法,可能面临 Stack Overflow 风险,建议在工程中调整或改为堆分配。
  • 探测命令与结果:

    ulimit -a
    core file size          (blocks, -c) unlimited
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 255853
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 524288
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 255853
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    

2. 系统级文件句柄上限 (System-wide File Handles)

  • 关键性P2

  • 信息解析

    • file-max 约为 $9.22 \times 10^{18}$nr_open 约为 10.7 亿。
    • 结论:内核层面的文件描述符限制极其宽裕,不存在系统级瓶颈。任何 "Too many open files" 错误均将源自进程级ulimit限制。
  • 探测命令与结果:

    cat /proc/sys/fs/file-max
    9223372036854775807
    
    cat /proc/sys/fs/nr_open
    1073741816
    

3. 线程与进程容量 (Thread & Process Capacity)

  • 关键性P1

  • 信息解析

    • pid_max (419 万) 和 threads-max (51 万) 提供了充足的 ID 空间。
    • 结论:系统支持高并发多线程模型,能够容纳雷达处理管线中密集的数据分发线程。
  • 探测命令与结果:

    cat /proc/sys/kernel/pid_max
    4194304
    
    cat /proc/sys/kernel/threads-max
    511707
    

4. 核心转储策略 (Core Dump Strategy)

  • 关键性P2

  • 信息解析

    • core_pattern 被重定向至 systemd-coredump。这意味着 Core 文件会被压缩并统一存储在 /var/lib/systemd/coredump/,而非散落在当前目录。这对长期运行的无人值守系统有利,便于统一回溯。
    • suid_dumpable0。这意味着如果雷达主程序使用了 setuid 提权或文件 capabilities崩溃时将不会产生 Core Dump。调试阶段建议临时设为 1
  • 探测命令与结果:

    cat /proc/sys/kernel/core_pattern
    |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
    
    cat /proc/sys/fs/suid_dumpable
    0
    

5. 管道缓冲区限制 (Pipe Buffer Limits)

  • 关键性P2

  • 信息解析

    • pipe-max-size1MB
    • 结论如果进程间通信IPC大量依赖 Pipe单次原子写入不应超过此值。对于高吞吐雷达数据建议使用共享内存而非管道。
  • 探测命令与结果:

    cat /proc/sys/fs/pipe-max-size
    1048576
    

6. System V IPC 限制 (Shared Memory & Semaphores)

  • 关键性P1

  • 信息解析

    • 共享内存:最大段大小 (Max Segment Size) 极为巨大PB 级),完全满足 GPGPU 异构计算中零拷贝Zero-copy或大块内存共享的需求。
    • 消息队列max message size 仅为 8192 字节。这表明 System V 消息队列仅适用于传递极小的控制指令Control Plane严禁用于传输雷达回波数据Data Plane
  • 探测命令与结果:

    ipcs -l
    ---------- 消息限制 -----------
    系统最大队列数量 = 32000
    最大消息尺寸 (字节) = 8192
    默认的队列最大尺寸 (字节) = 16384
    
    ---------- 同享内存限制 ------------
    最大段数 = 4096
    最大段大小 (千字节) = 18014398509465599
    最大总共享内存 (千字节) = 18014398509481920
    最小段大小 (字节) = 1
    
    --------- 信号量限制 -----------
    最大数组数量 = 32000
    每个数组的最大信号量数目 = 32000
    系统最大信号量数 = 1024000000
    每次信号量调用最大操作数 = 500
    信号量最大值=32767
    

7. 持久化资源配置文件 (Persistent Config File)

  • 关键性P1

  • 信息解析

    • 输出为空。说明 /etc/security/limits.conf 中没有显式配置。
    • 结论:当前的系统限制值(如 open files = 524288)可能来自于 systemd 的全局默认配置或 /etc/security/limits.d/ 下的子文件。但 memlock 的 64KB 限制必须在此文件中显式覆盖,否则每次重启都会面临实时性风险。
  • 探测命令与结果:

    grep -vE "^#|^$" /etc/security/limits.conf
    ()