求教
本人现在作一个实时性要求较高的项目,短时间内需要处理大量的消息,目前采用的是多线程处理这些消息,但是现在发现有些问题,多线程执行是乱序的,而我需要处理的消息有些需要按顺序执行(ID相同的信息),这样会对产生的结果带来无法预知的影响,不知道各位有什么好的办法处理这类事件没?
比如加线程池,单线程还是会乱序执行,不使用多线程,那如何来保证整个系统的性能?
忘赐教,不胜感激!
本人现在作一个实时性要求较高的项目,短时间内需要处理大量的消息,目前采用的是多线程处理这些消息,但是现在发现有些问题,多线程执行是乱序的,而我需要处理的消息有些需要按顺序执行(ID相同的信息),这样会对产生的结果带来无法预知的影响,不知道各位有什么好的办法处理这类事件没?
比如加线程池,单线程还是会乱序执行,不使用多线程,那如何来保证整个系统的性能?
忘赐教,不胜感激!
使用JMS 的Queue方式,性能可伸缩,可集群分布式。
非常感谢banq的回复!
现在系统又遇到一个问题了,内存泄露,问题比较严重.
系统运行一段时间后内存不断减低,基本上一天1个百分点的下降,而且现在用户量并不太多,一天也就几百个而已.用JProfiler监测了下,发现用户操作时GC的频率比较高,基本上是连续不断的在处理.而且,从任务管理器看到当用户操作时内存占用不断攀升,并且系统流量为0时,内存也不下降,当下次用户操作时候内存继续攀升,基本上10天就要重启服务,而且有意思的是,重启服务也不能释放多少内存,必须重启服务器,这样可以彻底释放内存.自查了下代码,基本上缓存啊什么的都有释放清除,而且还要定时器清除.现在不知道该如何查下去了,希望赐教!!!
不胜感激!!!
用JProfiler监测内存最大增长来自哪几个类,可以差错的,如果是自己应用程序,那肯定存在内存泄漏。
在本机模拟,客户端不断的发送操作指令,发现内存在不断的攀升,从服务启动时候的40M到现在的近300M,
一旦客户端停止操作,内存不会降下来,也不会涨上去.
不知道这部分内存是被什么吃了的,从监控结果看实在是看不出来
象使用内存分配图 不详细,应该有根据包package分类的,找到你自己的包情况。
另外不要在本地测试本地,也要注意CPU负载不能100%。
Java内存一般占用不会立即释放,垃圾回收机制启动才会释放,所以,内存撑着不用担心。
一般到内存剩余5%左右,垃圾回收机制会启动,启动后内存没有减少,说明存在内存泄漏,你这个现象明显内存泄漏,只是你没有仔细去跟踪你的包中哪些类耗费内存最多,GC后又不能完全恢复之前状态的。
我记得HPjmeter可以看jvm的heapdump信息
包括引用树
这样可以很明显的看出哪些东西占用内存一直没有释放