windows中Java服务CPU占用过高调优

最近发现线上一个部署在windows实例上的客户端服务占用CPU在70%~80%,造成本机卡顿。
排查过程如下
环境:

Windows2007版
JDK-1.8
Tomcat版本8.5.34(springboot版本2.0.5)

根据服务PID查找占用进程最高的线程:

查找具体线程信息可查阅:windows中查看CPU占用过高的线程
经排查,以下三个线程占用cpu达到了60%
线程tid信息
线程信息如下:
tid=7976
tid=4348
tid=332
如上图所示,占用cpu较高的线程均为NIO线程,去查看了很多由于tomcat版本造成CPU过高的相关博文。
记一次tomcat版本问题导致CPU超过100%
Java NIO浅析
apache-bugzilla-60030
断网故障时Mtop触发tomcat高并发场景下的BUG排查和修复(已被apache采纳)
等。

原因可能是windows环境下,JDK1.8+tomcat8.5.34版本中有NIO-bug问题。

博文汇总有以下处理方案:

  • tomcat版本升至8.5.5
  • 从NIO模式切换为NIO2模式
    均不适用于我们的情况,无法处理CPU过高的情况

最终处理方案:

限制该Java服务对CPU的使用率 + 设置该服务的JVM参数。
JVM参数如下:

-XX:MetaspaceSize=200m
-XX:MaxMetaspaceSize=400m
-Xmx1000M
-Xms1000M
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ES(Elasticsearch)通过以下方式来保障数据的高调用性: 1. 分布式架构:ES采用分布式架构,将数据分散存储在多个节点上,每个节点都具有数据的完整副本。这样即使某个节点发生故障,其他节点仍然可以提供服务,保证数据的可用性和高可靠性。 2. 数据复制:ES允许用户设置数据的副本数量。当某个节点宕机时,其他节点上的副本可以自动接管服务,确保数据的持续可用性。此外,通过复制数据,ES还可以提高读取性能,允许并行处理查询请求。 3. 自动故障转移:ES具有自动故障转移机制,当节点发生故障或下线时,集群的其他节点会自动接管该节点上的分片,并重新平衡集群的数据和负载。这样可以防止单点故障,并保持数据的高可用性。 4. 数据分片:ES将索引数据分成多个分片存储在不同节点上,每个分片都是独立的、可水平扩展的单元。这样可以实现数据的并行处理和高吞吐量,提高查询性能和响应速度。 5. 负载均衡:ES通过负载均衡算法将查询请求均匀地分发到各个节点上,避免某个节点负载过高而影响整体性能。同时,ES还支持动态添加和移除节点,可以根据实际需求进行扩缩容,保证系统的可伸缩性和高效性。 综上所述,ES通过分布式架构、数据复制、自动故障转移、数据分片和负载均衡等机制来保障数据的高调用性,确保数据的可用性、可靠性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值