软件工程师和算法工程师速来!正在直播:如何使用英特尔oneAPI工具实现PyTorch 优化>>>
@少帮主 @zbus
你好,我打算使用 zbus,所以做了一次测试。
测试过程如下: 下载 zbus,我的操作系统:win7 64 + jdk6,运行 zbus.bat,调整参数:Xmx3072m,verbose false,运行一个消费者:ConsumerExample.java,同时把输出关闭掉。然后,修改生产者,ProducerExample.java 中的代码,把里面的 for 循环改为 1百万 次,关闭system.out 输出,同时打开 jconsole 来监控内存。
结果发现,开始时,内存趋势是,一直往上涨,但最后程序无法运行完成,意思是后面内存后面基本用光,程序最后的打印语句没有输出,程序也没有退出。
请问,是不是我的测试有问题?不合理?还是程序有 bug ?
你把ProducerExample中的代码改成同步模式,异步刷入上百万的请求会产生堆积。
http://git.oschina.net/rushmore/zbus/blob/master/src/test/java/org/zstacks/zbus/ProducerExample.java?dir=0&filepath=src%2Ftest%2Fjava%2Forg%2Fzstacks%2Fzbus%2FProducerExample.java&oid=1361d7a004b598a663e7a349f4a95b1333348f1c&sha=f15235a43d905bb227c43bcd3111249072aee3a0
这是我做的压力测试,没有你说的问题,我不知道你的jvm配置是否正确。
加入zbus群: 467741880
Talk is cheap, show me the code
在上面直接贴出来问题吧
下面是我的测试过程及代码:
1、修改 zbus.bat 并启动,把其中的内存改为 -Xmx3072m,不向服务器终端输出信息(个人测试发现,如果向服务器终端发信息,速度慢一倍):-verbose false,代码如下:
3、打开生产者代码:http://git.oschina.net/rushmore/zbus/blob/master/src/test/java/org/zstacks/zbus/ProducerExample.java?dir=0&filepath=src%2Ftest%2Fjava%2Forg%2Fzstacks%2Fzbus%2FProducerExample.java&oid=1361d7a004b598a663e7a349f4a95b1333348f1c&sha=f15235a43d905bb227c43bcd3111249072aee3a0,修改其中的输出语句,把循环次数改为 1000 * 1000,并输出循环次数。
代码如下:
5、在未运行 生产者 时,内存情况如下:
现在一切都完全正常。
6、现在开始运行生产者代码,观察输出情况:
刚开始的时候,运行得很好,但大约一两分钟后,系统开始缓慢下来了。再到后面,就运行速度很慢,并出现内存溢出的现象(注意观察时间轴、内存和 cpu 使用情况),如图:
这时,系统就运行不下去了。
为了排除是 myeclipse 的问题,我将重新在终端运行上述步骤。并在下一个回复中展现我的测试。
1、重新启动服务器。
2、运行消费者。把编译好的生产者、消费者复制到D:\javaApp\zbus\zbus-dist下,并写两个运行生产者和消费者的批处理文件。代码如下:
运行消费者:
3、打开jconsole 内存监控
这是对服务器内存的监控:
4、运行生产者,并监控生产者与消费者:
但由于控制台输出影响,所以运行比较慢,把生产者与消费者的窗口最小化,监控变为:
最后,大约15分钟后,在我切换查看生产者窗口和消费者窗口时,这两个窗口分别自动退出,最后服务器的截图如下:
注,截图中的 cpu 突然上升,是我做了把生产者与消费者的窗口最小化后出现的。
为了排除 终端控制台 的影响,我准备再次把代码改一下,取消控制台的输出,并输出运行完后的时间。
在下一个回复中,把结果呈现出来。
1、消费者的代码中,把控制台输出语句注释掉。
2、为了排除生产者的消息大小的影响,把消息的 body 设置为空字符串,同时把控制台输出语句去掉,输出结束 1百万 次运行后的时间。
3、重启服务器
4、运行消费者
5、打开监控台
6、打开jconsole 监控服务器与消费者
7、运行生产者,并监控:
253秒后,运行完:
8、这次,完美运行。每次调用时间大约是 0.25 毫秒。
9、为了了解后面的运行情况,在不重启服务器与消费者的情况下,再次运行生成者,并观察服务器的情况:
10、从上面的图中,可以得出初步答案,同步调用,没有问题。但在 myeclipse 的环境中运行,会导致出错。
11、接着再做了一次异步的检测,但异步测试没有完成。现在要出去,晚上回来再继续。
6.2.0 消息持久化了,里面尝试去压下10亿以上的消息
http://git.oschina.net/rushmore/zbus
不限制异步刷入JVM容易产生full GC