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

news2024/11/26 3:36:14

文章目录

    • 背景
    • 工具
        • 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:
在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1122794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【电子通识】USB TYPE-A 2.0/3.0连接器接口

基础知识 USB TYPE-A连接器又可称为USB-A,现在不少PC、PC周边、手机充电器等等都依然采用了这种扁平的矩形接口,是目前普及度最高的USB接口了。 USB-A亦有分为插头与插座。常见的USB-A数据线的A端就是插头,而充电器上的则是插座。插头和插座…

buuctf[极客大挑战 2019]Havefun 1

网页环境title标题每一帧都不要放过&#xff0c;或许那个不起眼的地方就存在重要信息到这并未发现什么重要信息&#xff0c;F12看看在源代码底部发现PHP代码&#xff1a; <!-- $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } --> PHP代码…

自然语言处理---Transformer机制详解之Multi head Attention详解

1 采用Multi-head Attention的原因 原始论文中提到进行Multi-head Attention的原因是将模型分为多个头, 可以形成多个子空间, 让模型去关注不同方面的信息, 最后再将各个方面的信息综合起来得到更好的效果.多个头进行attention计算最后再综合起来, 类似于CNN中采用多个卷积核的…

高效使用python之xlwt库编辑写入excel表内容

头条号&#xff1a;科雷软件测试 学习目录 了解下电脑中的excel表格文件格式 安装xlwt库 xlwt库写入表格内容 1 导入xlwt库 2 用一个图展示下xlwt常用的函数 3 往表格写入一些内容并保存 4 设置样式 1 先初始化XFStyle 2 设置字体font 3 设置边框 4 设置对齐方式 …

word/ppt/excel出现错误代码:0x426-0x0

一、问题描述 突然打开Microsoft的软件时出现了这种错误 二、解决办法 按住winr&#xff0c;win就是键盘上四个方块组成的键。 然后输入“control” 找到程序和功能&#xff0c;然后点击 找到Microsoft Office 家庭和学生版2021-zh-cn 注&#xff1a;你的版本版本可能不是这个…

Java IO输入输出流 第15章

Java I/O输入/输出流 第15章 1.输入/输出流 Java I/O&#xff08;输入/输出&#xff09;流是用于在Java程序中处理输入和输出数据的机制。这是与文件、网络连接、键盘、屏幕等各种数据源和数据目标进行交互的重要方式。Java的I/O库提供了一组类来处理各种I/O操作&#xff0c;…

【计算机网络笔记】TCP/IP参考模型基本概念,包括五层参考模型

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

概率论_概率公式中的分号(;)、逗号(,)、竖线(|)

1. 概率公式中的分号(;)、逗号(,)、竖线(|) ; 分号代表前后是两类东西&#xff0c;以概率P(x;θ)为例&#xff0c;分号前面是x样本&#xff0c;分号后边是模型参数。 , 逗号代表两者地位平等&#xff0c;代表与的关系 | 竖线代表 if&#xff0c;以条件概率P(A|B)为例&#xff0…

【数据结构】String类对象的创建与字符串常量池的“神秘交易”

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力…

【码制】原码反码补码移码浮点数

从C语言占位符到码值 学C语言的时候一定会用到printf("%d",a); 有的课程称%d为“占位符”&#xff0c;非常形象&#xff1a;%d替a占位&#xff0c;输出的时候a的值会替换%d的内容。 但也有课程称之为“转换规范”&#xff0c;官方称之为“format specifiers”格式说…

Git最佳实践:git常用命令和原理

Git 是一个开源的分布式版本控制系统。 Git 工作区、暂存区和版本库 工作区&#xff1a;就是你在电脑里能看到的目录。暂存区&#xff1a;英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件&#xff08;.git/index&#xff09;中&#xff0c;所以我们把暂存区有时…

7.20 SpringBoot项目实战【图书详情-学生端】:图书信息 + 评论列表 + 是否收藏

文章目录 前言一、接口规划二、编写服务层三、编写数据访问层四、编写控制器五、PostMan测试1. getBook 根据id获取图书2. getBookCommentList 根据id获取图书详情 - 评论列表3. getFavoriteId 获取学生收藏了某图书的收藏id 最后 前言 学生的【借阅申请】审核通过以后&#x…

nodejs+vue市民健身中心网上平台-计算机毕业设计

市民健身中心网上平台分为用户界面和管理员界面&#xff0c;用户界面功能模块图如图1所示&#xff0c;管理员界面功能模块图如图2所示。 目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs…

springboot+avue医院绩效考核系统源码

医院绩效考核系统是一种以人力资源管理为基础&#xff0c;选用适合医院组织机构属性的绩效理论和方法&#xff0c;基于医院战略目标&#xff0c;构建全方位的绩效考评体系&#xff0c;在科学、合理的绩效管理体系基础上&#xff0c;采用科学管理的方法&#xff0c;如平衡计分卡…

C++前缀和算法:生成数组原理、源码及测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 动态规划&#xff0c;日后完成。 题目 给定三个整数 n、m 和 k 。考虑使用下图描述的算法找出正整数数组中最大的元素。 请你构建一个具有以下属性的数组 arr &#…

Amazon CodeWhisperer让力扣不再用力code!

书接上文《爱编程 why not AI编程》&#xff0c;通过前文的对于Amazon CodeWhisperer的介绍、入门指南、相关课程以及【云上探索实验室】活动&#xff0c;各位读者们应该对于Amazon CodeWhisperer有了一些了解&#xff0c;那么作者今天将该通过本篇文章来介绍用Amazon CodeWhis…

OpenCV官方教程中文版 —— Canny 边缘检测

OpenCV官方教程中文版 —— Canny 边缘检测 前言一、原理1.噪声去除2.计算图像梯度3.非极大值抑制4.滞后阈值 二、OpenCV 中的 Canny 边界检测练习 前言 OpenCV 中的 Canny 边缘检测 • 了解 Canny 边缘检测的概念 • 学习函数 cv2.Canny() 一、原理 Canny 边缘检测是一种…

FreeRTOS深入教程(任务的引入及栈的作用)

文章目录 前言一、任务的引入二、深入理解C语言函数的调用1.ARM架构2.基础汇编指令3.函数运行流程分析 三.保存现场的几种情况1.函数调用2.中断处理3.任务切换 总结 前言 本篇文章开始带大家深入学习FreeRTOS&#xff0c;带大家学习什么是任务&#xff0c;并且深入学习栈的作用…

Openssl数据安全传输平台008:业务数据分析+工厂方法

文章目录 UML图1.1 客户端1.2 服务器端 UML图 1.1 客户端 // 准备要发送的数据 struct RequestMsg {//1 密钥协商 //2 密钥校验; // 3 密钥注销int cmdType; // 报文类型string clientId; // 客户端编号string serverId; // 服务器端编号string sign;string data; };1.2 服务器…

USB学习(1):USB基础之接口类型、协议标准、引脚分布、架构、时序和数据格式

连接计算机外围设备最简单的方法是通过USB(通用串行总线)。USB是即插即用接口&#xff0c;可以将扫描仪、打印机、数码相机、闪存驱动器等计算机外围设备连接到计算机上。本篇文章就来介绍一下USB的一些基础知识&#xff0c;包括。 文章目录 1 接口类型和标准规范2 引脚分布3 …