我已经(过去)编写跨平台(Windows/Unix的),其命令行启动时,处理用户输入的应用Ctrl- C以同样的方式组合(即彻底结束应用程序).
在Windows上是否可以从另一个(不相关的)进程发送Ctrl- C/ SIGINT /等效进程来请求它干净地终止(给它一个整理资源的机会等)?
除了Java任务控制中更"先进"的GUI之外,它们有何不同?
乍一看,它们似乎提供了非常相似的功能(解释JMX数据和内存/ CPU分析).
但是,由于它们都随JDK一起提供(我使用的是JDK 1.7.0_51 SE),我假设存在显着差异,否则它们将合并为一个解决方案.特别是因为这会显着增加JDK的大小.
Java Mission Control最终是否会在未来取代JVisualVM?
我经常在Linux和Mac上向开发人员展示jhat,jps和jstack工具集.但是,一位开发人员最近表示,如果相关的Java应用程序作为Windows服务运行,则这些在Windows中无法使用.
一个太阳提交的bug说的非常相似,但由于不活动而被关闭.
我已经为自己测试了这一点,但事实上它似乎是正确的,尽管我几乎无法相信.这是设置:
这在Windows XP,Windows 2003 Server和Windows 7下可重现.Java版本1.5和1.6产生相同的结果.
有没有办法从终端,即使以管理员身份登录,"sudo up"获取JPS和其他工具来查看java服务?
我有Java应用程序,不幸的是,它在一段时间后开始消耗相当大的内存.更复杂的是,它不仅是Java应用程序,也是JavaFX 2应用程序.
我怀疑有一些内存泄漏,甚至可能在底层的JavaFX调用和本机库中.
理想的解决方案是在某个时刻获取所有java对象的转储(使用它们的内存),然后分析该转储.有没有办法实现这个目标?
我在执行下面的命令时遇到了以下异常
jmap -dump:format=b,file=heap_dump.bin <process_id>
Run Code Online (Sandbox Code Playgroud)
输出:
Dumping heap to <file_name>
Exception in thread "main" java.io.IOException: Premature EOF
at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:248)
at sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:199)
at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:217)
at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:180)
at sun.tools.jmap.JMap.dump(JMap.java:242)
at sun.tools.jmap.JMap.main(JMap.java:140)
Run Code Online (Sandbox Code Playgroud)
JDK版本:1.7.0_45
VM_OPT:
-Xms2g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=1500
-XX:G1HeapRegionSize=2 -XX:+PrintFlagsFinal -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2
Run Code Online (Sandbox Code Playgroud)
硬件:RHEL 5.x,4核CPU Linux机器6 GB RAM
根据oracle bug报告数据库(http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6882554),这个问题已经修复,但我仍然得到jdk 1.7版本,内置编号为:45
除了升级到Jdk 1.8之外,您能否提出任何解决方案,由于其他依赖性,这在我的情况下是不可能的?
编辑:
我已尝试使用以下命令,此命令也不起作用(生成部分转储文件)并显示相同的早期EOF.
jmap -J-d64 -dump:format=b,file=<filename> <pid>
Run Code Online (Sandbox Code Playgroud)
我已经与启动该过程的用户触发了该命令.该用户具有该目录的写权限.该文件已生成但尚未完成.
为2 GB堆写入了9 MB文件,该文件无法用于分析.
我是Heaps的新手,任何人都可以建议我如何对任何java进程(如Jmeter)进行堆转储.我读到了关于jmap命令,但我没有得到执行/编写它的地方和方式(在eclipse或cmd中).这可能是一个非常基本的问题,但仍然需要建议.我可以从任何地方下载jmap.exe和jhat.exe吗?谢谢
我正在尝试使用以下 2 个命令进行堆转储
jcmd 产生 ~300M 的文件大小,jmap 产生 ~1.4G 的文件大小。为什么这些是不同的大小,我们在 jmap 中有任何其他信息吗?我在 jcmd 中遗漏了一些参数吗?
JDK 是 1.8.0_162
Xms 和 Xmx 是 4G
问题说明
我注意到我们在Wildfly 8.2.1上的每个Java8应用程序的部署使用了大约30-40 MB的Metaspace内存池.这很好,但事实是,一旦我重新部署相同的应用程序,Metaspace内存使用量将增加相同的30-40 MB,而旧的已分配的内存不会被释放.
我甚至都没有注意到它,但问题是我们有大约20个应用程序,并且我不时需要同时重新部署其中的10个应用程序.这反过来会导致一幅可怕的画面.
我不确定为什么GC无法释放分配给旧类的内存.这个服务器总共有16GB的物理内存,所以我可以重新部署所有应用程序,最多20-40次就是这样.应用服务器将达到限制并将停止响应任何命令.
所以,如果有人能帮我理解实际问题,我将非常感激:
有关我的代码库的更多细节
1)与Wildfly一起使用2个独立的HornetQ服务器,每个应用程序使用~5个通道,每个通道至少有5个并发消费者.这反过来导致每个应用程序至少25个线程,总共至少25*20 = 500个线程.
2)对于所有低级JMS操作,我使用Spring JMS.
我想更改 Spring-Boot Web 应用程序的 Java 中的默认线程堆栈大小。我怎样才能改变这个?或者我需要使用哪个参数来更改该值?
另外,第二个问题是,我可以在运行时以编程方式更改它吗?
我们在生产[Java/Scala]中部署了应用程序.当CPU使用率或内存使用量激增时,我们会设置警报.
偶尔我们会看到CPU或内存使用量出现大幅增长.有时,正在运行的应用程序停止响应请求.
我经常在崩溃之前看到最后几次API命中的日志,这样我最近发现其中一个API正在下载大量数据并且内存耗尽.
当产品出现问题时,我是否可以获得解决一般问题[捕获统计数据的命令/工具]的提示?
java ×9
heap-dump ×3
performance ×2
windows ×2
eof ×1
heap-memory ×1
java-8 ×1
javafx-2 ×1
jcmd ×1
jmap ×1
jms ×1
jvisualvm ×1
jvm ×1
jvm-hotspot ×1
memory ×1
memory-leaks ×1
metaspace ×1
scala ×1
sigint ×1
signals ×1
spring-boot ×1
thread-dump ×1
visualvm ×1
wildfly ×1