Tag: jvm

GC调整 – 阻止完整GC

我正在尝试避免在生产中运行Tomcat中的Grails应用程序的Full GC(来自下面的gc.log示例)。 有关如何更好地配置GC的任何建议? 14359.317:[Full GC 14359.317:[CMS:3453285K-> 3099828K(4194304K),13.1778420 secs] 4506618K-> 3099828K(6081792K),[CMS Perm:261951K-> 181304K(264372K)] icms_dc = 0,13.1786310 secs] [次:user = 13.15 sys = 0.04,real = 13.18 secs] 我的VM参数如下: -Xms = 6G -Xmx = 6G -XX:MaxPermSize参数= 1G -XX:新尺寸= 2G -XX:MaxTenuringThreshold = 8 -XX:SurvivorRatio = 7 -XX:+ UseConcMarkSweepGC -XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled -XX:+ CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction = 60 -XX:+ UseCMSInitiatingOccupancyOnly […]

Spring Boot堆在非活动状态下的使用情况

我在本地部署了一个非常简单的spring boot应用程序。 它只有一个类 – 控制器。 这就是它。 我注意到的是堆分配不稳定并且有峰值和突然下降。 为什么会这样。 我没有对该应用程序进行过一次调用。 来自VisualVM的视图:

如何设置可执行Spring Boot jarfile的JVM属性?

作为后续问题, 如何构建一个Spring Boot jar文件,systemd可以直接作为服务执行? ,如何设置可执行Spring Boot jarfile的JVM属性? 例如,如何设置最大堆大小(即-Xmx2048m )?

限制Java进程的总内存消耗(在Cloud Foundry中)

与这两个问题相关: 如何设置JVM的最大内存使用量? 什么会导致java进程大大超过Xmx或Xss限制? 我在Cloud Foundry上运行Java应用程序,需要确保不超过分配的内存。 否则,这是当前的问题,该进程被Cloud Foundry监视机制(Linux CGROUP)杀死。 Java Buildpack自动为-Xmx和-Xss设置合理的值。 通过调整参数并配置(最大)预期线程数,我非常确定Java进程消耗的内存应该小于我分配给Cloud Foundry应用程序的上限。 但是,我仍然遇到Cloud Foundry“内存不足”错误( 不是 Java OOM错误!): index: 3, reason: CRASHED, exit_description: out of memory, exit_status: 255 我试验了MALLOC_ARENA_MAX设置。 将值设置为1或2会导致启动缓慢。 在MALLOC_ARENA_MAX=4我仍然看到如上所述的错误,因此这不是我的问题的解决方案。 目前我使用非常紧凑的内存设置进行测试,以便更容易重现问题。 但是,即使这样,我也要等待大约20-25分钟才能发生错误。 我必须指定哪些参数和/或环境变量,以确保我的Java进程永远不会超过某个内存限制? 如果应用程序实际需要更多内存,则可以使用Java OOM错误。 有关MALLOC_ARENA_MAX更多信息: https://github.com/cloudfoundry/java-buildpack/pull/160 https://www.infobright.com/index.php/malloc_arena_max/#.VmgdprgrJaQ https://www.ibm.com/developerworks/community/blogs/kevgrig/entry/linux_glibc_2_10_rhel_6_malloc_may_show_excessive_virtual_memory_usage?lang=en 编辑:可能的解释是: http : //www.evanjones.ca/java-bytebuffer-leak.html 。 正如我目前在执行大量传出的HTTP / REST请求时看到的OOM问题,这些缓冲区可能是罪魁祸首。

使用Dropbox Java SDK for API v2时获取SSLHandshakeException

在XPages应用程序中,我想利用用于API v2的Dropbox Java SDK(2.1.2)来获取有关我的Dropbox帐户的信息。 以下代码用于检索相应的帐户对象: String atoken = “****”; DbxRequestConfig rc = new DbxRequestConfig(“****”); DbxClientV2 client = new DbxClientV2(rc,atoken); DbxUserUsersRequests users = client.users(); FullAccount acc = users.getCurrentAccount(); // Exception raised here 最后一行引发以下exception: com.dropbox.core.NetworkIOException: No appropriate protocol at com.dropbox.core.DbxRequestUtil.startPostRaw(DbxRequestUtil.java:240) … Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol at com.ibm.jsse2.kb.c(kb.java:347) … 从堆栈跟踪中我得出结论, IBMJSSE2是用于处理SSL握手的安全提供程序。 所以我在非Domino JVM(JRE7)中运行了上面的代码,它使用了SunJSSE安全提供程序,并且没有任何问题。 因此问题必须与IBM的Domino JVM有关,但我无法弄清楚如何修复它。 任何人都可以帮我解决这个问题或提供解决方案吗? […]

尝试重新转换类时得到“UnsupportedOperationException”

JDK1.6,动态修改jvm中加载的类。 当我评论代码时: classReader.accept(classAdapter, ClassReader.SKIP_DEBUG); , “UnsupportedOperationException”exception消失。 实际上,为了测试我的代码,我没有修改任何字段或方法。 但是程序在调用retransformClasses()之后捕获exception”UnsupportedOperationException” 。 有没有类似的例外? 可以给我一些建议吗? 代码如下: public byte[] modifySleepMethod() throws Exception { System.out.println(“Call modifySleepMethod”); ClassReader classReader = new ClassReader(classfileBuffer); System.out.println(“new classreader”); ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS); System.out.println(“new classwriter”); ClassAdapter classAdapter = new ModifyMethodClassAdapter(classWriter); classReader.accept(classAdapter, ClassReader.SKIP_DEBUG); byte[] classFile = null; classFile = classWriter.toByteArray(); FileOutputStream fos; try { fos = new […]

在下面的代码中,为什么JVM与其他线程相比给予特定线程更多的时间?

当我运行这两个代码时,只有当我按下GUI中的发送按钮时,包含可运行代码的线程才会生效。但是我读到JVM随机选择线程并给每个线程提供时间,但是这里似乎JVM给了更多时间要运行的GUI和包含runnable的线程只有在按下发送按钮时才会获得时间。 客户代码 – import java.io.*; import java.net.*; import java.util.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SimpleChatClient { JTextArea incoming; JTextField outgoing; BufferedReader reader; PrintWriter writer; Socket sock; public static void main(String[] args) { SimpleChatClient client = new SimpleChatClient(); client.go(); } public void go() { JFrame frame = new JFrame(“Ludicrously Simple Chat Client”); JPanel […]

什么触发了Java垃圾收集器

我对Java中的垃圾收集工作方式有点困惑。 当没有更多的实时引用时,我得到一个对象有资格进行垃圾收集,但是如果它引用了活动对象呢? 假设我有一组节点再次引用更多节点 List 1 -> Node a -> Node b 2 -> Node c -> Node d 3 -> Node d -> Node c 4 -> Node e 5 现在,如果我删除列表,节点cd和e应该是垃圾收集。 节点e没有更多的引用,节点c和d具有循环引用。 但是Node a怎么样? 它会被垃圾收集吗? 无论节点b是否有外部实时引用,它会有所不同吗? 假设节点b是否有来自不同位置的引用,是否会使节点停留在内存中?

增加Java堆大小

我正在尝试增加jvm的堆大小值,但它不起作用。 有人可以帮我解决这个极客问题吗? 我的配置如下:Windows 7 x64,4 GB,i3 CPU 当我尝试像-Xmx2000M之类的东西时,我什么都没有 我的错误在哪里?

如何在当前机器上运行jvms

想象一下:两个Java项目可以在JDK1.5和JDK1.6上运行。两个可以在JDK 1.7上运行。 如何获取正在运行的jvm名称,pids和项目名称。 结果应该看起来像: pid 1234,projec_tname prj1,java_version JDK1.6 pid 4354,projec_tname prj2,java_version JDK1.5 pid 6234,projec_tname prj3,java_version JDK1.7 pid 9034,projec_tname prj4,java_version JDK1.7 解决方案是否有一个Java库在当前机器上搜索JVM? 是在当前机器中找不到运行的JDK。 我的问题没有帮助。 有任何想法吗?