返回题库

Proc Memory 统计

Proc Memory Stats

专题
Systems & Architecture / 系统与架构
难度
L2
来源
MyntBit

题目详情

低延迟交易系统需要严格内存管理,防止碎片化并确保确定性性能。监控 Linux 的 /proc/self/status 伪文件允许应用跟踪常驻内存集和虚拟内存使用。

任务:实现 MemoryMonitor 类,定期读取 /proc/self/status 提取 VmRSS、VmSize 和 VmPeak 统计。检测内存增长趋势和碎片化指标,超过阈值时发出告警。

英文原题

Low-latency trading systems require strict memory management to prevent fragmentation and ensure deterministic performance. Monitoring the /proc/self/status pseudo-file on Linux allows applications to track resident set size and virtual memory usage in real-time to detect leaks and maintain system stability.
Task
Implement the parse method within the ProcessMonitor class to extract specific memory metrics from a raw string representing the content of /proc/self/status. The method must efficient

解析

问题分析

交易系统需要精确监控进程内存使用(RSS、虚拟内存),以防止内存泄漏导致 OOM。Linux /proc/self/status 提供 VmRSS、VmSize、VmPeak 等指标,无需外部工具。

实现

struct MemStats { size_t vm_rss_kb, vm_size_kb, vm_peak_kb; };
MemStats parseProcStatus(const std::string& raw) {
    MemStats s{};
    for (auto& line : split(raw, '\n')) {
        if (line.starts_with("VmRSS:")) s.vm_rss_kb = extractKB(line);
        else if (line.starts_with("VmSize:")) s.vm_size_kb = extractKB(line);
        else if (line.starts_with("VmPeak:")) s.vm_peak_kb = extractKB(line);
    }
    return s;
}

复杂度与边界

  • 时间复杂度:O(行数),/proc/self/status 约 50 行
  • 空间复杂度:O(1)
  • 边界条件:(1) 字段缺失时设为 0 (2) 单位可能为 kB/MB/GB (3) cgroup 限制下实际可用内存小于物理内存

英文解析

Analysis

Trading systems need precise monitoring of process memory usage (RSS, virtual memory) to prevent memory leaks leading to OOM. Linux /proc/self/status provides VmRSS, VmSize, VmPeak metrics without external tools.

Solution

struct MemStats { size_t vm_rss_kb, vm_size_kb, vm_peak_kb; };
MemStats parseProcStatus(const std::string& raw) {
    MemStats s{};
    for (auto& line : split(raw, '\n')) {
        if (line.starts_with("VmRSS:")) s.vm_rss_kb = extractKB(line);
        else if (line.starts_with("VmSize:")) s.vm_size_kb = extractKB(line);
        else if (line.starts_with("VmPeak:")) s.vm_peak_kb = extractKB(line);
    }
    return s;
}

Complexity & Edge Cases

  • Time complexity: O(line count), /proc/self/status ~50 lines
  • Space complexity: O(1)
  • Edge cases: (1) Missing fields default to 0 (2) Units may be kB/MB/GB (3) Under cgroup limits, available memory is less than physical memory

Verification

Read /proc/self/status, verify VmRSS matches expected memory usage. Test after large allocation and deallocation. Benchmark against cgroup memory limits.

Key Considerations

In-process memory monitoring via /proc enables early detection of memory leaks before OOM. Trading systems should log VmRSS every minute - a steadily increasing RSS indicates a leak that will eventually cause OOM kill during peak trading hours.