我会尽量简短。我有一个程序:
- 使用来自RabbitMQ服务器的JSON字符串消息。
- 提取重要字段并将它们放入另一个JSON(不同结构)中。我正在使用Jackson解析器的POJO模型。
- 通过HTTP POST请求将它们发送到服务器。使用HttpUrlConnection(每个消息一个连接)和DataOutputStream#write(byte [])。
醇>
我有3个消费者(3个线程,每个消耗一个不同的队列)执行这3个步骤,它工作正常。但是,我收到的邮件数量非常大(一小时内有500封邮件),似乎这些请求缓慢但逐渐地占用了常驻内存。堆是稳定的,并由垃圾收集器定期清理。
问题可能在:
- 我的RabbitMQ消费者:他们被限制为1条消息(qos = 1),直到它得到承认,所以我不认为这个问题就在这里。
- HttpURLConnection对象:我认为这是问题,因为如果我们只消耗数据,那么内存就是稳定的。
醇>
使用分析器我可以看到堆增长直到达到峰值,然后垃圾收集器清理它(参见附图):
如何控制使用的驻留内存?有什么办法可以控制大量的POST请求吗?