java - 如何调试破坏者的性能?
问题描述
所以我有代码:
private void schedule(....) {
long s = m_ringBuffer.next();
.....
m_logger.info("1 [{}]", s);
m_ringBuffer.publish(s);
.....
}
private void run(){
.....
while(true){
...
final long availableSequence = m_barrier.waitFor(nextSequence);
while (nextSequence <= availableSequence) {
m_logger.info("2 [{}] [{}]", nextSequence, availableSequence);
Task t = m_ringBuffer.get(nextSequence);
m_logger.info("3");
...
}
}
}
.... 10 次中有 9 次很快,但我会遇到类似的情况
13:35:46.365 [Thread-1] INFO App - 1 [44905]
13:35:46.380 [Thread-2] INFO App - 2 [44905] [44905]
13:35:46.380 [Thread-2] INFO App - 3
我使用 BusySpinWaitStrategy,但我不知道在那 15 毫秒内发生了什么……而且环形缓冲区是空的。
我的 Thread-1 和 Thread-2 被固定到它们独立的 cpu 上。
是否有任何 Linux 系统工具可以让我对此进行调试,或者查看 UNSAFE.get 和 UNSAFE.putOrderedInt 正在做什么?(strace 似乎没有帮助,而且速度很慢)
我的应用程序还使用多个 Chronicle 队列,所以我不确定那里是否存在任何“冲突”,因为 Chronicle 中到处都有 UNSAFE 调用。
我的 Disruptor 版本是 3.4.2,使用 Java 8。
非常感谢!
解决方案
推荐阅读
- docker - Docker ADD 命令产生“找不到文件”错误
- c# - 面板应淡入,然后应加载新场景
- laravel - View Share 不返回更新的数据,那么如何分享实时数据?
- javascript - 当值未定义时,如何填充 UTM 参数的默认值?
- excel - 从excel填充的Word vba条件comdobox下拉列表
- swift - 使用来自不同文件夹中文件的类
- git - 为什么即使我的本地 repo 是最新的远程仓库,`git push --force-with-lease` 也会失败并显示“rejected ... stale info”?
- netsuite - 在 SuiteScript 2.0 中重新加载子列表
- javascript - 如何从 .animate 制作 .toggle
- java - 如何通过 glassfish 服务器上的容器管理身份验证实现“首次登录时更改密码”