创建仓库
This commit is contained in:
145
系统基座文件/1/1.1/1.1.4 系统级资源限制 (System Resource Limits).md
Normal file
145
系统基座文件/1/1.1/1.1.4 系统级资源限制 (System Resource Limits).md
Normal file
@@ -0,0 +1,145 @@
|
||||
---
|
||||
tags:
|
||||
date created: 星期三, 十一月 19日 2025, 3:57:04 下午
|
||||
date modified: 星期三, 十一月 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` (文件句柄) 已达 **524288**,`core file size` 为 `unlimited`,这有利于高并发 Socket 通信和崩溃现场保留。
|
||||
- **注意点**:`stack size` 为 **8192KB (8MB)**。对于深度递归或在栈上分配大型矩阵的 DSP 算法,可能面临 Stack Overflow 风险,建议在工程中调整或改为堆分配。
|
||||
- 探测命令与结果:
|
||||
|
||||
```bash
|
||||
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)限制。
|
||||
- 探测命令与结果:
|
||||
|
||||
```bash
|
||||
cat /proc/sys/fs/file-max
|
||||
9223372036854775807
|
||||
```
|
||||
|
||||
```bash
|
||||
cat /proc/sys/fs/nr_open
|
||||
1073741816
|
||||
```
|
||||
|
||||
**3. 线程与进程容量 (Thread & Process Capacity)**
|
||||
|
||||
- **关键性**:P1
|
||||
- **信息解析**:
|
||||
- `pid_max` (419 万) 和 `threads-max` (51 万) 提供了充足的 ID 空间。
|
||||
- 结论:系统支持高并发多线程模型,能够容纳雷达处理管线中密集的数据分发线程。
|
||||
- 探测命令与结果:
|
||||
|
||||
```bash
|
||||
cat /proc/sys/kernel/pid_max
|
||||
4194304
|
||||
```
|
||||
|
||||
```bash
|
||||
cat /proc/sys/kernel/threads-max
|
||||
511707
|
||||
```
|
||||
|
||||
**4. 核心转储策略 (Core Dump Strategy)**
|
||||
|
||||
- **关键性**:P2
|
||||
- **信息解析**:
|
||||
- `core_pattern` 被重定向至 `systemd-coredump`。这意味着 Core 文件会被压缩并统一存储在 `/var/lib/systemd/coredump/`,而非散落在当前目录。这对长期运行的无人值守系统有利,便于统一回溯。
|
||||
- `suid_dumpable` 为 `0`。这意味着如果雷达主程序使用了 `setuid` 提权或文件 capabilities,崩溃时将**不会**产生 Core Dump。调试阶段建议临时设为 `1`。
|
||||
- 探测命令与结果:
|
||||
|
||||
```bash
|
||||
cat /proc/sys/kernel/core_pattern
|
||||
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
|
||||
```
|
||||
|
||||
```bash
|
||||
cat /proc/sys/fs/suid_dumpable
|
||||
0
|
||||
```
|
||||
|
||||
**5. 管道缓冲区限制 (Pipe Buffer Limits)**
|
||||
|
||||
- **关键性**:P2
|
||||
- **信息解析**:
|
||||
- `pipe-max-size` 为 **1MB**。
|
||||
- 结论:如果进程间通信(IPC)大量依赖 Pipe,单次原子写入不应超过此值。对于高吞吐雷达数据,建议使用共享内存而非管道。
|
||||
- 探测命令与结果:
|
||||
|
||||
```bash
|
||||
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)。
|
||||
- 探测命令与结果:
|
||||
|
||||
```bash
|
||||
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 限制必须在此文件中显式覆盖,否则每次重启都会面临实时性风险。
|
||||
- 探测命令与结果:
|
||||
|
||||
```bash
|
||||
grep -vE "^#|^$" /etc/security/limits.conf
|
||||
(空)
|
||||
```
|
||||
Reference in New Issue
Block a user