我有一个应用程序,它侦听UDP数据报的端口。我使用UDP入站通道适配器来侦听此端口。我的UDP通道适配器配置为使用ThreadPoolTaskExecutor来分派传入的UDP数据报。在UDP通道适配器之后,我使用直接通道。我的频道只有一个用户,即服务激活器。
该服务将传入消息添加到存储在内存中的同步列表中。然后,我有一个线程,每5秒检索一次列表内容,并对MySQL数据库进行批量更新。
我的问题:
堆大小不断增长,并在一段时间后导致内存执行。
我正在尝试找到提高应用程序性能的解决方案。
由于
答案 0 :(得分:3)
每5秒存储10,000条记录对于任何数据库来说都是很多。
您需要考虑其他选项
答案 1 :(得分:2)
建议
一个。你真的需要一个同步列表吗?难道你不能拥有一组列表,让我们说在这些列表之间分配工作,假设通过对数据的键运行hashCode?
湾你可以使用从列表中读取信息的线程线程池(顺便说一下,我会在这里使用队列),这样,当一个线程由于批量插入很多而“卡住”时,其他线程仍然可以读取“作业” “从队列中执行它们?
℃。您的数据库是否与应用程序共存于同一台计算机上?这可以提高性能
d。你可以发布你的插入查询吗?也许有人可以为您提供优化方法?
答案 2 :(得分:2)
使用数据库连接池,这样您就不必在任何一个线程上等待提交。只需抓住下一个可用的连接并进行并行插入即可。
答案 3 :(得分:1)
我在SQLServer表上每秒获得5.000次插入,但这需要相当多的优化。没有使用下面的所有提示,有些可能对您有用。