为什么当我不保存信息时,Tshark 内存使用量会增加?

问题描述 投票:0回答:3

我想持续监控来自特定来源的 TCP 数据。

我在 Windows 服务器上的 cygwin mintty xterm 中使用此命令。

tshark.exe -i 5 -f "tcp port 1234" -T fields -e data | xxd -r -p

这非常有效,因为我得到了一个 ASCII 滚动窗口,这是发送给我的数据。当连接失败时(这就是我正在尝试调试的),最后发送的数据将显示在 cygwin 窗口中。

但是,我注意到 Tshark 内存使用量不断攀升,几个小时后就相当大了。

对此我能做什么?我想让它运行几天。

wireshark pcap
3个回答
2
投票

您可能想尝试修改

tshark
命令行选项以包含
-b files:N
选项(可能还有其他
-b
选项以及 duration 和/或 filesize)来启动环形缓冲区。这样做将导致
tshark
在滚动到环形缓冲区中的下一个文件时丢弃其内部状态。丢弃状态意味着释放与该状态信息相关的所有内存,因此至少在理论上,您可以永远捕获。

如需了解更多信息,请随时阅读 Wireshark 博客文章 “To Infinity and Beyond! Capturing Forever with Tshark”,作者 Evan Huus,他是 Wireshark 核心开发人员之一,也是负责实现此功能以丢弃状态的人员信息。


1
投票

我遇到了类似的问题,但我没有捕获到文件中,而是读取已经从大文件(75GB)中捕获的数据包。因此,看起来 tshark 有一些内部簿记表,该表随着许多包而增长。对我来说,解决方案是会话重置选项(-M),它看起来会截断内部状态:

tshark -r /tmp/traffic.pcap -M 100000

0
投票

我也不用

-w
记录数据包(但它自己会记录数据包,带有
.pcapng
扩展名的文件会在
/tmp/
中疯狂增长)

我解决了这两个问题:

  1. 内存消耗
  2. 内部 pcapng 文件不断增长

.. 通过添加

-a duration:3600
+ 自动重启运行我的
tshark
的 systemd 服务。因此,一小时后
tshark
会自行停止,
/tmp/
中的内存和文件将被释放,并且
tshark
会由 Systemd 重新启动。

© www.soinside.com 2019 - 2024. All rights reserved.