在Mac OS上的Java随机减速
-
22-07-2019 - |
题
我有通过分解成片和运行在不同的线程每段做一组跨多个处理器科学计算的一个Java程序。问题是平凡的分区所以有在线程之间没有竞争或通信。他们访问的唯一的通用数据是不需要有自己的访问不同步的一些共享静态缓存和硬盘驱动器上的一些数据文件。螺纹也不断写入磁盘,但到单独的文件。
我的问题是,有时,当我运行程序我得到很好的速度,有时当我运行完全相同的运行速度非常慢。如果我看到它运行缓慢和Ctrl-C,然后重新启动它,它通常会开始再次快速运行。这似乎本身早就进入设置或者慢速模式或快速模式在运行和模式之间切换从来没有。
我迷上它到JConsole的和它似乎并不成为一个内存问题。当我抓住它运行缓慢,我试图连接探查器,但该分析器将无法连接。我试着-Xprof运行,但似乎慢运行和快速运行之间的转储不会有很大的区别。我已经使用不同的垃圾收集器和存储器空间的各个部分的不同的胶料,也尝试。
我的机器是条纹RAID分区的Mac Pro。 CPU使用率从来没有脱落其是否缓慢或快速运行,而如果线程中花费太多时间阻止从磁盘读取你所期望的,所以我不认为这可能是一个磁盘读取问题。
我的问题是,什么类型的我的代码问题可能导致此?或者,可这是一个操作系统的问题?我一直无法复制它在Windows机器,但我没有Windows机器具有类似RAID的设置。
解决方案
其他提示
我第二,你应该用探查做它看线程查看 - 多少线程,什么状态是他们等这可能是一个奇怪的比赛条件,然后现在发生的每一个。它也可能是与分析器钩插装的类(这将导致减速)的情况下,sortes争用条件出来,你会看到与探查没有减速附:/
请看看这个帖子一>,或者更确切地说,答案,那里高速缓冲存储器争用问题提及。
您产卵线程同时赭每一次?那是数小于或等于你的平台上可用线程数?该号码可以检查或guestimated与公平的精度。
请张贴任何finidngs!
你有没有衡量CPU温度的工具吗?操作系统可能是节流CPU处理温度的问题。
有没有可能是你的程序被分页到磁盘有时?在这种情况下,你需要看一下操作系统作为一个整体的内存使用情况,而不仅仅是你的程序。我从经验中知道有当内存被不断地分页到磁盘和背部在运行时性能的巨大差异。
我不知道很多关于OSX,但在Linux中“自由”命令是用于这一目的。
这可能会导致这样放缓的另一个问题是日志文件?我至少知道,逐渐放慢了系统日志文件长大一些日志代码。这有可能是你的线程在其上的大小增长日志文件同步,那么当您重新启动程序,另一个日志文件被使用。