wishel 发表于 2009-6-28 14:38:10

l楼主看看你的服务器运行时候cpu,内存,磁盘的负荷情况。看看能不能找到瓶颈。

yaoxing25 发表于 2009-6-28 14:44:38

数据上报的时候CPU最多只有40%,内存也正常40M左右。
看来真的是我们的系统无法处理这么多数据了。

wishel 发表于 2009-6-28 14:55:41

cpu没满负荷,系统还有富裕能力啊?
应该是程序算法有问题。你的那个缓冲是多线程处理的么?增加并发处理线程数试试看。

wishel 发表于 2009-6-28 15:07:35

原帖由 yaoxing25 于 2009-6-27 00:38 发表 http://www.acejoy.com/bbs/images/common/back.gif
现在又出现新的问题了,就是我的handle_input()方法可以接收数据,可是我后面的方法无法及时处理这些数据,我尝试使用一个缓冲区来保存这些数据然后再启动一个线程来处理。可是同样存在一个问题,就是我的线程也无法及时处理 ...

你只启动了一个线程来处理,如果这个线程阻塞在某处呢?试试看多起几个线程,注意做好同步。

yaoxing25 发表于 2009-6-28 19:19:27

是呀,我是启动一个线程来处理,缓冲区,然后我对缓冲区的数据进行解析,然后根据解析结果再启动相应的线程来处理数据。可是 这样我的缓冲区里还是存在数据处理不过来。目前我为了这个数据缓冲已经启动了七个线程,可是同样不能处理及时,可能是算法效率太低。但就是我优化算法这些数据一旦同时上报我的数据缓冲区同时会存在阻塞。。。

wishel 发表于 2009-6-29 13:37:27

你贴点处理缓冲区的线程的代码上来看看吧,我感觉是处理线程阻塞了。
如果是算法效率低但没阻塞,cpu负载会很高,因为一直在运算。

winston 发表于 2009-6-29 13:50:21

贴点相关的代码上来,大家分析分析

steven99ca 发表于 2009-7-1 01:58:01

“我的设备的数据上报的太猛了”
如果CPU足够,就没问题。尽量不要在handle_input中处理数据,考虑异步处理数据。
可以参考ace_message_queue.

yaoxing25 发表于 2009-7-6 23:21:07

现在又出现了一个问题,就是系统正在运行的时候,run_event_loop()异常退出,run_reactor_event_loop()也同样存在这个问题,我在调用run_event_loop()时已经调用了owner(ACE_Thread::self()); 我要如何才能保证run_event_loop()正常工作?我发现一旦run_event_loop()退出所有的连接socket都已经断开,我猜想可能是数据量太大导致,可是减少连接同样也会存在这个问题,主要出现的情况是,我在批量删除设备连接时出现的。大家有没有什么好的办法解决这个问题呀!急呀!~!

modern 发表于 2009-7-6 23:43:58

别着急,慢慢来,
首先,你是在批量删除设备的时候,导致event_loop的异常退出么?
还是运行运行着就退出了,导致所有连接socket都断开了?
我从你提供的信息里,不太能确定。
得把这个实际的流程按顺序准确复述出来才好解决问题哦。

其次,你做的批量删除设备,是如何操作的,具体点。
是使用的remove_handler么?
如果删除操作处理不当是有可能导致事件循环异常退出的。
页: 1 2 [3] 4
查看完整版本: 关于ACE_Reactor的问题(救命。。。)