gpt4 book ai didi

java - JnetPcap:从脱机文件读取速度非常慢

转载 作者:行者123 更新时间:2023-12-02 03:03:25 24 4
gpt4 key购买 nike

我正在使用jnetpcap v1.4r1425构建一种自定义版本的wireshark。我只想打开离线 pcap 文件并将它们显示在我的表格 View 中,除了速度之外,它的效果很好。我打开的文件大约有 100mb,有 700k 个包。

public ObservableList<Frame> readOfflineFiles1(int numFrames) {  
ObservableList<Frame> frameData = FXCollections.observableArrayList();

if (numFrames == 0){
numFrames = Pcap.LOOP_INFINITE;
}
final StringBuilder errbuf = new StringBuilder();

final Pcap pcap = Pcap.openOffline(FileAddress, errbuf);
if (pcap == null) {
System.err.println(errbuf); // Error is stored in errbuf if any
return null;
}


JPacketHandler<StringBuilder> packetHandler = new JPacketHandler<StringBuilder>() {
public void nextPacket(JPacket packet, StringBuilder errbuf) {


if (packet.hasHeader(ip)){
sourceIpRaw = ip.source();
destinationIpRaw = ip.destination();

sourceIp = org.jnetpcap.packet.format.FormatUtils.ip(sourceIpRaw);
destinationIp = org.jnetpcap.packet.format.FormatUtils.ip(destinationIpRaw);
}

if (packet.hasHeader(tcp)){
protocol = tcp.getName();
length = tcp.size();

int payloadOffset = tcp.getOffset() + tcp.size();
int payloadLength = tcp.getPayloadLength();

buffer.peer(packet, payloadOffset, payloadLength); // No copies, by native reference
info = buffer.toHexdump();
} else if (packet.hasHeader(udp)){
protocol = udp.getName();
length = udp.size();


int payloadOffset = udp.getOffset() + udp.size();
int payloadLength = udp.getPayloadLength();

buffer.peer(packet, payloadOffset, payloadLength); // No copies, by native reference
info = buffer.toHexdump();
}

if (packet.hasHeader(payload)){

infoRaw = payload.getPayload();
length = payload.size();

}


frameData.add(new Frame(packet.getCaptureHeader().timestampInMillis(), sourceIp, destinationIp, protocol, length, info ));
//System.out.print(i+"\n");
//i=i+1;
}

};
pcap.loop(numFrames, packetHandler , errbuf);
pcap.close();


return frameData;
}

这段代码对于前 400k 个包来说非常快,但之后它就慢了很多。前 40 万个包裹大约需要 1 分钟,其余大约需要 10 分钟。这里有什么问题呢?

这并不是说列表变得太耗时了,不是吗? listmethod add 的复杂度是 O(1),不是吗?

我也在官方 jnetpcap 论坛上询问过这个问题,但它不是很活跃。

编辑:

enter image description here

事实证明,由于堆的使用,它的速度大大减慢。有没有办法减少这种情况?

最佳答案

正如探查器向您显示的那样,您的内存不足,并且速度开始变慢。

要么使用 -Xmx 提供更多内存,要么不要一次将所有数据包加载到内存中。

关于java - JnetPcap:从脱机文件读取速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42108255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com