Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

减少内存占用

Wireshark 使用大量内存来保存状态、进行 reasembly 以及处理其他事情,而且可能并不总是以最高效的方式进行。这里收集一些可能值得探索的想法。

找出占用内存的内容

今天我们认为 packet list、reassembly functions、frame data 和 address resolution 相关内容是主要的内存大户。但我们确实知道吗?

用于显示实际内存使用量的 GUI 代码

在 ui/gtk/memory_dlg.c 中,我们已有显示实际内存使用量的代码开端,也许应该对其进行扩展。

  • 显示 wmem 分配
  • 设计一个注册函数,用于注册 g_hastable callbacks,并带有 hastable name、每个 entry 的近似内存使用量。这将使获取 hastable 中的 entries 数量并粗略估算其消耗的内存成为可能。

地址解析

Address resolution 即使在 addresses 未被解析时也会消耗内存,因为 IP address string 会被缓存。它本应为 packet list 节省内存,但我不确定它是否按预期工作。应该审查。

Reasembled data

Reasembled data 会保存在内存中。如果改为保存到文件中,将节省大量内存,但可能会在时间方面成本更高。Follow TCP stream 在处理乱序数据包方面做得更好,因此写入文件也可能带来其他好处。

  • 写入一个 tmp 文件,其中每个 reasmbled fragments 使用一个 “block”,并且在表中只保留 file pointer 和 length indicator,很像当前的 fdata?
  • 在读取原始文件时写入一个新文件,并将 reasembled data 作为新的 pcapng option 写入带有最终 fragment 的 block。Fragment Blocks 需要设置 reasembled flag。当第一遍完成后切换到新文件。新文件应可保存并作为 “pre reasembled file” 使用
  • 这对 live captures 有效吗?
  • 如果我们有一个 “reassembled file”,其中 reasembly 未正确工作,我们能否 reset 并重试?

Imported from https://wiki.wireshark.org/Reduce memory footprint on 2020-08-11 23:23:52 UTC

相关 Wireshark Wiki 页面

网络分析技术档案