|
8
|
| Stu Thompson Helter Scelter · 技术社区 · 16 年前 |
|
|
1
5
我知道这个答案来得太晚了,但是jstack的昂贵部分来自于附加到调试器接口,通常不会生成堆栈跟踪,但有一个重要的异常(堆大小根本不重要): 任意堆栈跟踪只能在安全点上生成,也可以在线程等待时生成(即在java范围之外)。如果线程正在等待/超出java范围,则堆栈请求线程将通过自己执行堆栈遍历来执行任务。但是,您可能不希望“中断”线程来遍历它自己的堆栈,特别是当线程持有锁(或正在进行一些繁忙的等待)时。因为没有办法控制安全点-这是一个需要考虑的风险。
最后一点:我喜欢jstack,它在生产系统上非常强大。 |
|
2
3
测量。其中一个
这意味着它需要0.32秒的墙时间,在用户空间使用0.00秒的cpu时间,在内核空间使用0.00秒的cpu时间。 创建一个测试场景,让一个程序运行但什么也不做,并尝试与使用jstack和不使用jstack进行比较,例如每秒一次。然后你有一个硬数字,可以尝试看看什么会给一个合理的开销。 我的预感是每五分钟一次是不可忽视的。 |
|
3
0
根据线程的数量和堆的大小,jstack可能非常昂贵。JStack是用来排除故障的,不是用来收集数据的。最好在检测上使用某种形式,或者公开JMX接口以直接获取所需的信息,而不是解析堆栈跟踪。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |