草庐IT

java - 如何在 Java GC 中使旧区域自适应调整大小?

为了调整Java6(1.6.0_23)GC,我使用-XX:+UseParallelOldGC和-XX:+PrintTenuringDistribution-XX:+UseAdaptiveSizePolicy-XX:+UseAdaptiveGCBoundary我的目标是让GC计算新旧区域之间的最佳比例。然而,visualgc(jvmstat3.0)表明,虽然伊甸园和幸存者之间的比例根据我的工作量进行了修改,旧区域(绝望地)保持其初始大小,由newRatio(在我的例子中为2)固定。我的设置或期望有什么问题?在我的屏幕上,经过19次收集后,visualgc显示旧Gen始终低于500m而旧G

Spark调优解析-GC调优3(七)

1GC调优Spark立足内存计算,常常需要在内存中存放大量数据,因此也更依赖JVM的垃圾回收机制。与此同时,它也兼容批处理和流式处理,对于程序吞吐量和延迟都有较高要求,因此GC参数的调优在Spark应用实践中显得尤为重要。按照经验来说,当我们配置垃圾收集器时,主要有两种策略——ParallelGC和CMSGC。前者注重更高的吞吐量,而后者则注重更低的延迟。两者似乎是鱼和熊掌,不能兼得。在实际应用中,我们只能根据应用对性能瓶颈的侧重性,来选取合适的垃圾收集器。例如,当我们运行需要有实时响应的场景的应用时,我们一般选用CMSGC,而运行一些离线分析程序时,则选用ParallelGC。那么对于Spa

java - HashSet vs ArrayList CPU 使用率高

我有104k个字符串值,其中89k个是唯一的。我想检查这个列表中是否存在一个字符串。这是我的类及其保存所有这些记录的方法。publicclassTestClass{privatestaticTestClasssingletonObj=null;privateListstringList=null;publicstaticsynchronizedTestClassgetInstance(){if(singletonObj==null){singletonObj=newTestClass();}returnsingletonObj;}publicbooleanisValidString(S

java - 设置java使用一个cpu

我有一个应用程序拥有一定数量的cpus许可证,我希望能够在检查完成之前将运行java的cpus数量设置为1。我正在运行Solaris并查看了pbind但认为如果我启动应用程序然后使用pbind它会在设置java可以使用的CPU数量之前检查许可证。有谁知道在Solaris上启动具有一定数量CPU的应用程序的方法吗? 最佳答案 这是一种变通方法,但使用Solaris10,您可以设置一个具有单个可用CPU的区域,然后在该区域内运行应用程序。如果您想在不运行完整应用程序的情况下进行测试,他们很可能使用这段Java来获取CPU的数量:Runt

针对 JDK8 构建时,Java 应用程序 CPU/负载更高

我有一个在Windows中的EclipseLuna中开发的Java应用程序,它在AmazonEC2(c3.large,AmazonLinux)中运行。此应用程序进程以非常一致的传入速率工作。当我针对JDK8u31构建应用程序时,EC2CPU负载远高于针对JDK7u75构建的同一应用程序。该应用程序最初在EC2上使用默认JRE运行,我添加了OpenJDK1.8.0.31以利用Java8ProcesswaitFor(longtimeout,TimeUnitunit)。该应用程序的主要工作涉及使用Runtime.exec调用应用程序。$sudoalternatives--configjava

java - 为什么 GC 时间在长时间运行的高容量 Java 应用程序上稳步增加?

我有一个大容量Java应用程序,它处理50000条消息/秒的一致负载。它使用以下设置针对高吞吐量进行了调整:我发现年轻的GC时间从开始时的50毫秒稳步上升到一天结束时的200毫秒,尽管GC运行的频率保持不变。如果我使用ParNewGC收集器尝试相同的运行,GC时间会以更快的速度增加。有没有人对这个问题有任何想法? 最佳答案 如果您有内存泄漏,或者内存中的缓存逐渐使用越来越多的内存,这些都会导致GC做更多的工作来跟踪可访问的对象。其他可能性是:您有非堆内存泄漏,这会导致分页增加;即,将物理内存页面复制到磁盘并返回。一些外部进程正在消耗

java - 用户名的正则表达式会增加 CPU 消耗

我们有以下用户名验证规则:用户名可以包含字母数字字符用户名可以有下划线、连字符或句号现在假设用户名是ASCII用户名不能以句点开头或结尾用户名不能开始、结束或有任何空格我们有以下相同的正则表达式:^(([a-zA-Z0-9]+[_-]*[a-zA-Z0-9]*)([\\.]*[a-zA-Z0-9])*)+$现在尝试匹配特定的字符串,CPU使用率呈指数增长。例如:M45766235H.M96312865E@EXAMPLE.COM显然,像上面那样匹配字符串应该会立即失败,但我想知道为什么要占用那么多CPU周期。最终代码:importjava.util.regex.*;publicclass

Java VisualVM CPU 使用率和处理器亲和性

根据我今天的经验,我发现Oracle的JavaVisualVM将cpu使用率显示为总机器内核的百分比,即使被监视的JVM在操作系统中设置了有限的进程亲缘关系也是如此。这是在“监视器”选项卡中。使用taskset(在linux、Ubuntu上)限制受监控的jvm,当允许该jvm的处理器在htop中接近100%利用率时,cpu百分比显示在VisualVM显然等于cpu总数除以被监控的jvm允许的处理器数。因此,秤的分辨率对于这种情况是不够的。您能否确认您在其他操作系统或一般情况下观察到相同情况?有没有办法让VisualVM在显示CPU使用率时只考虑关联分配的核心?

Java 垃圾收集器 G1GC 花费很长时间等待 'Object Copy'(疏散暂停)

我不是Java新手,但我对垃圾回收知之甚少。现在我想通过一些实际经验来改变这种状况。我的目标是延迟时间低于0.3秒,或者在极端情况下0.5秒也可以。我有一个带有-Xmx50gb(-Xms50gb)的应用程序并设置了以下其他GC选项:-XX:+UseG1GC-Xloggc:somewhere.gc.log-XX:+PrintGCDateStamps但现在我偶尔会因为垃圾收集而暂停超过5秒,尽管似乎有足够的可用内存。我发现的一个原因:[GCpause(G1EvacuationPause)(young)42G->40G(48G),5.9409662secs]为什么GCG1还在为此做一个“停止

linux倒序查看占用cpu或内存最多的进程

一、获取当前系统占用CPU最高的前10个进程命令:psaux|head-1;psaux|sort-rn-k3|head-10该命令组合由2条独立的命令组成:psaux|head-1:这一句是为了获取标题(USERPID%CPU%MENVSZRSSTTYSTATSTARTTIMECOMMAND)信息。而head:-N可以指定显示的行数为N行,默认显示10行。psaux|sort-rn-k3|head-10:这一句是一个输出加排序组合,ps参数的a指代all,表示所有的进程;u指代userid,就是执行该进程的用户ID;x指代显示所有程序,不以终端机来区分。接下来是sort命令:1.参数r指代re