远程监控高并发高吞吐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规范…...
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事件
最近,线上的一个 App 收到用户反馈,输入框禁用状态下点击无法拉起模态框。找了一下身边可用机型进行了测试,起初所有机型都没有复现这个问题,突然有一天 Redmi K30S Ultra 出现了异常,点击输入框无法触发点击事件&…...
Arduino IDE + Esp32 Cam + 实现视频流 + 开发环境部署
1、开发环境 Arduino ide 版本:2.2.1 esp32工具: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力扣打卡
打卡记录 同积元组(哈希表 排列组合) 链接 思路:用哈希表将数组中出现的两不同数乘积依次记录,将出现两次以上的乘积组通过排列组合计算总情况个数。 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的比较消融实验 总结 简介 题目:《Consistent-Teacher: Towards Reducing Inconsistent Pseudo-targets in Semi-supervi…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
