最近某同学的有个程序跑得好慢,疑似有点问题。程序的核心是读取pcap数据包,然后白名单过滤插入数据库。在实际使用中发现每秒插入数据库条数在1000条每秒左右,而且是在占用了30个左右的数据库连接情况下,效率有点低。
刚开始我以为是数据库插入部分写得有点问题,这里采用的是逐条insert的方式,我经过查阅资料选择了改进为
insert all into test(a,b,c) values ('a1','a','a')
into test(a,b,c) values ('a2','a','a')
into test(a,b,c) values ('a3','a','a')
into test(a,b,c) values ('a4','a','a')
into test(a,b,c) values ('a5','a','a')
select * from dual
这样子的插入,从理论上来说应该是有较大提高的。
但是实际中发现速度提升很不明显,我就往前面看,发现白名单过滤这里采用了正则表达式,这是比较耗资源的一个行为,他首先采用了正则表达式来去匹配这是否是个正规的域名,这里我觉得没什么必要删掉了,其次他大量采用了临界区去锁这个资源,我表示理解不能。。。删掉
然后发现效率有小量提升,但不是特别明显,继续研究。
然后到了程序的起始
写道
pcap_loop(fp,0,packet_handler,NULL);
pcap_close(fp);
位置
这里在packet_handler发现了问题,他把对包的解析功能写在了里面,这是比较复杂的一个过程,合理的方式应该是在这里只做一件事,把包放到队列里,然后结束,另外开多线程去处理包。
问题定位到。ok
分享到:
相关推荐
`pcap_loop()`会连续处理指定数量的数据包,而`pcap_next()`则一次处理一个数据包。 5. **解析数据包**:每捕获到一个数据包,Winpcap都会提供一个`pcap_pkthdr`结构体,包含数据包的时间戳、长度等信息,以及一个...
标题“1118抓包1118抓包1118抓包1118抓包1118抓包1118抓包1118抓包”多次提及“抓包”,暗示了我们正在讨论的是网络抓包相关的主题。而描述部分“1118抓包1118抓包1118抓包1118抓包1118抓包”则可能是重复强调这一...
传统的数据包处理方式在处理大量数据包时会导致性能瓶颈,因为每次数据包到达都会触发硬件中断,这使得中断处理程序频繁地被调用,增加了CPU的负担。NAPI技术通过减少中断频率,利用轮询的方式处理数据包,显著提升...
这意味着开发者可以编写一次代码,在不同系统上运行。 5. **API接口**:libpcap提供了一组C语言的API,供其他应用程序调用。这些接口允许程序打开网络接口,设置捕获参数,读取数据包,以及应用过滤器。 6. **...
它可以从pcap文件中读取数据包,并通过修改IP地址的方式将数据包克隆到标准输出,这一功能使得它在各种网络数据包分析与处理场景中显得非常实用。 pcap文件格式是一种广泛应用于网络数据包捕获和分析的文件格式,它...