当前位置: 首页 > news >正文

远程监控高并发高吞吐java进程

文章目录

    • 背景
    • 工具
        • jconsole和jvisualvm
    • 压测实战
        • 以太坊Java程序监控
            • 1.使用jconsole监控
            • 2.使用jvisualvm监控
    • 问题分析
        • 堆内存使用异常
            • 通过调整`内存策略`来应对:
        • 交易虚增问题

背景

作为使用java技术栈的金融类公司,确保Java程序在生产环境中的稳定性和性能至关重要。由于生产环境访问受限,远程监控成为了主要的监控方式。本文将介绍如何使用一些工具来监控以太坊的Java应用程序,并深入探讨技术细节。

工具

在本文中,我们将主要使用两个工具:jconsole 和 jvisualvm。

jconsole和jvisualvm

jconsole和jvisualvm都是Java虚拟机(JVM)自带的监控工具,无需额外安装。它们提供了丰富的功能来监控和分析Java进程的性能和健康状态。虽然它们都能胜任监控任务,但它们各自具有不同的特点。

jconsole:这个工具提供了图形用户界面,用于监控Java进程。您可以通过特殊参数在被监控的远程Java进程启动时打开监控端口,并在监控机器上打开jconsole,输入相应的地址和端口以连接到远程进程。需要注意的是,在某些情况下,您可能需要在 /etc/hosts 中配置IP和名称的映射以解决连接问题。

jvisualvm:与jconsole类似,jvisualvm也提供了图形界面,但它在线程查看方面更为方便,线程以不同颜色进行标识,使您更容易识别。如果您只关注单个Java进程的内存堆详细信息,jconsole可能更适合。不过,jvisualvm在某些方面更强大,例如提供了Pending队列数量的直观显示。

注意:jvisualvm比jconsole更强大,特别是在线程查看方面。它还提供了更多的性能监控功能,因此在大多数情况下,jvisualvm可能是更好的选择。

压测实战

以太坊Java程序监控

在我们的案例中,我们使用以太坊的Java程序作为示例,该程序是一个大型Java应用程序。我们的机器资源有限(4核8GB内存),如何有效地监控这个高并发、高吞吐量的Java进程呢?

首先,让我们看一下如何使用jconsole和jvisualvm来监控这个Java进程。

1.使用jconsole监控

要使用jconsole监控远程Java进程,首先需要在远程Java进程启动时加上特殊参数,以打开监控端口。以下是一个示例命令:


java -server -XX:NewSize=3g -XX:MaxNewSize=3g -XX:InitialHeapSize=6g -XX:MaxHeapSize=6g -XX:SurvivorRatio=4 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7979 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar ethereumj-core-1.5.0-SNAPSHOT-all.jar

接下来,在本地运行jconsole命令,并输入远程Java进程的IP和端口(例如,192.168.213.49:7979)。如果出现连接问题,请确保您的 /etc/hosts 文件中已配置IP和名称的映射。

jvisualvm比jconsole好的地方是线程查看很方便,有不同颜色标出;如果只看单个进程还是jconsole的内存堆详细

如下是监控系统的拓扑图(概略)
在这里插入图片描述

一个形象的说法是,此类命令讲究**“里应外合”**,里应就是被监控的远程java 进程启动时带上特殊参数,打开那个监控端口,外合就是我监控的机器(一般是我笔记本电脑)开始jconsole图形解密并输入对应的地址和刚才那个端口*

2.使用jvisualvm监控

jvisualvm的使用方式与jconsole类似,也分为两步。首先,您需要添加服务器的IP地址,然后使用“添加JMX连接”来输入端口信息。
在这里插入图片描述
在这里插入图片描述

jconsole和jvisualvm可以同时连接同一台服务器的同一个端口

不仅如此,jvisualvm还具有一些优势,例如提供了Pending队列数量的直观显示,使您更容易分析性能数据。

总结一下,jvisualvm通常更加强大,并且适用于大多数监控任务。它允许您同时连接到同一台服务器的同一个端口,使监控更加灵活。


问题分析

在实际监控过程中,我们可能会遇到各种性能问题。让我们来分析一些可能的问题和解决方法。

堆内存使用异常

之前的pending队列是异步的模式下,堆内存使用一直居高不下

恢复同步模式后,经过运行,内存使用量下降了,cpu也恢复正常

在这里插入图片描述

通过调整内存策略来应对:
  • Eden大 survivor和old小; 不能8:1

    • 因为这里的交易,都是大量瞬时产生,异步发出后,或者记入区块后就没有用了,应该消亡了

    • 以太坊的内存图谱和我的基金资金结算交易系统的很像,都是大量临时对象起来,ephemeral,后续不用了,老年代比较小

  • 永久代的内容还是会慢慢增加,加上ethereumj本身可能的问题,还是需要每日重启节点

    • 这里的重启是指银行的业务节点,可以是loadbalance下的双活,重启在晚间业务低谷,先重启另外一台,这台负责全部流量;再重启这台
交易虚增问题

春峰在压测时,发现JMeter联不上,后来就也用JConsole了

比起2个多月之前的测试,cpu进步很大,稳定在40%,线程数量也保持稳定,目前看内存泄露的风险不大,注意测试持续了12个小时,这个是首次这么长时间;而且tps有1285,系统也没崩掉

但是监控到一个问题
原来一直是200多的交易每区块,但是突然变成5156最大了,原来到每个区块是,因为Pending队列还是List的,清理的时候并发错误,但是一直在挖那个区块?

原因

区块是有效了,各节点都认可,但是trytoConnect的时候,清理出错,结果Pending队列没有清理,写入leveldb也有问题,导致这个本来应该是事务的操作没有完成,结果就反复出同样的块了

code:
在这里插入图片描述

另外一段记录在区块链研究的性能测试报告那块了

相关文章:

远程监控高并发高吞吐java进程

文章目录 背景工具jconsole和jvisualvm 压测实战以太坊Java程序监控1.使用jconsole监控2.使用jvisualvm监控 问题分析堆内存使用异常通过调整内存策略来应对: 交易虚增问题 背景 作为使用java技术栈的金融类公司,确保Java程序在生产环境中的稳定性和性能…...

MapperStruct实现类为空

​ 问题描述: MapperStruct生成的实现了为空 按照在MapperStruct官网Installation – MapStruct中的方法配置后,生成的实现了是空的,如下: Overridepublic DeployHistory toEntity(DeployHistoryDto arg0) {if ( arg0 null ) …...

【webpack】wabpack5 知识梳理

1、简单介绍 默认功能 可处理 js、json文件,处理 js 文件引入将其打包; 可处理字体、图片、音视频等静态资源(webpack5有内置loader:asset); 将es6的import规范编译为浏览器可识别的commonjs规范&#xf…...

ThinkPHP 3.2 常用内置函数

ThinkPHP 3.2 内置函数CDM疑问: D与M方法的相同点与不同点IAR 内置函数 C C方法是用于获取或修改,系统配置参数 语法: 获取:C(需要获得的配置参数Name) $value C(config_name);设置:C&…...

STM32F4_USB读卡器(USB_Slave)/USB U盘(Host)

前言 STM32F4芯片自带了USB OTG FS(FS,即全速,12Mbps)和USB OTG HS,支持USB Host和USB Device。 1. USB简介 USB,是英文Universal Serial BUS(通用串行总线)的缩写,是一…...

【网络安全入门】学习网络安全必须知道的100 个网络基础知识

前言 先领取资料再阅读哦 【282G】网络安全&黑客技术零基础到进阶全套学习大礼包(附面试题答案),免费分享! 【282G】网络安全&黑客技术零基础到进阶全套学习大礼包(附面试题答案),免…...

96核的AMD锐龙Threadripper PRO 7995WX性能如何?

AMD新推出的锐龙Threadripper 7000系列可以说是目前最快的工作站处理器,最顶级的锐龙Threadripper PRO 7995WX拥有96个Zen 4内核,共192线程,基础频率2.5GHz,加速频率5.15GHz,拥有384MB L3缓存和多达128条PCI-E 5.0通道…...

TS和JS的区别

1.TS和JS的区别 ts 是js的超集。 从执行环境上来看,浏览器、node.js 可以直接执行js,但不能执行ts;编译层面,Ts 有编译阶段,js 没有,只有转译阶段和lint阶段;ts更难写一点,但类型更安全。ts 代码写出来就是…...

顺序栈的实现----数据结构

栈的概念 对于栈(Stack),后进先出(Last In First Out,LIFO),栈也是一种线性表,只不过是一种操作受限的线性表,只能在一端操作,也就是不允许在中间进行查找、…...

k8s calico 网络原理

一、cluster ip Cluster IP 是 Kubernetes 中 Service 的 IP 地址,它是一个虚拟 IP 地址,用于集群内的 Pod 相互通信。 例如: Cluster IP:2.2.2.2负载的真实Pod IP:1.1.1.1 场景: Pod A 的 IP 地址是 …...

【Python学习笔记】循环

Python中有两种类型的循环: while 循环 和 for 循环 1. while 循环 while循环是: 检查一个条件表达式,只要条件表达式计算结果为True 时, 就执行下面缩进的代码。 如此反复,直到条件表达式计算结果为False时,结束 循…...

1 如何入门TensorFlow

近年来人工智能的火爆吸引了很多人,网上相关的热门课程报名的人很多,但是坚持下去的人却少。那些晦涩的原理没有一定知识的积累很难能理解。 如果你对人工智能感兴趣,且想利用人工智能去实现某项功能,而不是对人工智能本身感兴趣&…...

QTday02(常用类、UI界面下的开发、信号与槽)

今日任务 1. 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin"&#x…...

自然语言处理---RNN经典案例之使用seq2seq实现英译法

1 seq2seq介绍 1.1 seq2seq模型架构 seq2seq模型架构分析: seq2seq模型架构,包括两部分分别是encoder(编码器)和decoder(解码器),编码器和解码器的内部实现都使用了GRU模型,这里它要完成的是一个中文到英文的翻译:欢迎…...

Python【判断列表的存在与否关系】

要求:使用列表判断一个列表是否在另外一个列表中 代码如下: list1 [1, 2, 6, 8, 7, 10, 5] print("列表1为:", list1) list2 [2, 6, 5, 10] print("列表2为:",list2) res False a 0 for i in list2:if …...

MyBatis篇---第三篇

系列文章目录 文章目录 系列文章目录一、如何执行批量插入?二、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?三、MyBatis实现一对一有几种方式?具体怎么操作的?一、如何执行批量插入? 首先,创建一个简单的insert语句: <insert id=”…...

uview1.0部分机型u-input组件禁用后无法触发click事件

最近&#xff0c;线上的一个 App 收到用户反馈&#xff0c;输入框禁用状态下点击无法拉起模态框。找了一下身边可用机型进行了测试&#xff0c;起初所有机型都没有复现这个问题&#xff0c;突然有一天 Redmi K30S Ultra 出现了异常&#xff0c;点击输入框无法触发点击事件&…...

Arduino IDE + Esp32 Cam + 实现视频流 + 开发环境部署

1、开发环境 Arduino ide 版本&#xff1a;2.2.1 esp32工具&#xff1a;2.0.5 示例代码 #include "esp_camera.h" #include <WiFi.h>// // WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality // Ensure ESP32 Wrover Modu…...

Day4力扣打卡

打卡记录 同积元组&#xff08;哈希表 排列组合&#xff09; 链接 思路&#xff1a;用哈希表将数组中出现的两不同数乘积依次记录&#xff0c;将出现两次以上的乘积组通过排列组合计算总情况个数。 class Solution { public:int tupleSameProduct(vector<int>& num…...

Paper Reading:《Consistent-Teacher: 减少半监督目标检测中不一致的伪目标》

目录 简介工作重点方法ASA, adaptive anchor assignmentFAM-3D, 3D feature alignment moduleGMM, Gaussian Mixture Model实施细节 实验与SOTA的比较消融实验 总结 简介 题目&#xff1a;《Consistent-Teacher: Towards Reducing Inconsistent Pseudo-targets in Semi-supervi…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...

MeshGPT 笔记

[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭&#xff01;_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...