精华内容
下载资源
问答
  • 2019-01-24 11:21:15

    今天调研基于Web的SSH的应用程序的时候无意间看到了一个Web Console的工具,虽然没有满足我的最终需求,但还是试了一下,可以当作一个受限的基于Web远程执行命令工具使用。

    下载并解压

    首先从 http://web-console.org/ 下载安装包,就是一个zip包 webconsole-0.9.7.zip,下载后解压。

    wget -c https://github.com/nickola/web-console/releases/download/v0.9.7/webconsole-0.9.7.zip
    unzip webconsole-0.9.7.zip
    

    配置

    编辑 webconsole.php 文件

    # 如果是单用户使用,添加用户名和密码
    $USER = 'admin';
    $PASSWORD = 'admin';
    
    # 如果是多用户使用,配置下面两项
    # $ACCOUNTS = array('user1' => 'password1', 'user2' => 'password2');
    

    这里说明一下,这里的用户名和密码并不对应linux系统上的用户名和密码,而是指定可以使用 Web Console 这个工具的用户。因此我们可以随意指定。在后太真正执行的linux命令其实是以apache(如果在apache中运行)或者启动webconsole.php这个脚本的用户来执行的。

    运行

    这里为了方便测试,我并没有放到我的 apache 下运行,而是直接使用 php 启动一个 built-in web 服务来运行。

    php -S 192.168.0.123:12345 webconsole.php
    

    然后通过浏览器访问 http://192.168.0.123:12345 来访问。页面打开后,会提示输入用户名和密码,这里就可以输入上面配置的用户名和密码。然后我们运行基本的 linux 命令了。

    ...
    user@192.168.0.123 ~$ hostname
    myhost
    user@192.168.0.123 ~$ id
    uid=1000(kongxx) gid=1000(kongxx) groups=1000(kongxx),10(wheel)
    

    通过上面的命令可以看出最终执行命令的用户其实是kongxx这个Linux用户。

    注意

    这里需要说明一下,Web Console对于命令执行立刻结束的命令支持比较好,比如上面的两个命令,但是对于一些交互式或者无退出的命令目前还不能支持,一旦运行就会hang住,比如:ping,vi/vim等。

    更多相关内容
  • bumblebee(大WaSP)运维工具:基于Elves开源自动化运维开发平台进行开发,实现的一款远程命令行执行工具(Elves开源自动化运维开发平台地址:),bumblebee分为manager、client、script三部分。 manager Java编写,纯...
  • Web浏览器NPAPI插件,用于调用命令行工具 这是一个网络浏览器插件。 安装后,JavaScript可以调用本地命令行工具,例如ls 。 这个插件非常危险,因为远程网页可以使用它来控制您的系统。 仅应将其用作有关如何编写...
  • 本门课程,大喵将会打着大家从零打造一款属于大家自己的 CLI命令行脚手架工具,本课程主要面向新手同学,对命令行工具开发,前端工具开发感兴趣的同学,可以通过本门课程学习到如何使用Node.JS开发一款适配自身项目...
  • 浏览器是无法和远程机器进行通信的,我们就得借助后来帮助实现这样的一个功能需求,具体的实现逻辑是: 用户————>控制浏览器命令行界面————>发送命令到后端服务器————>后端服务器连接socket...

     

    前言

    叮当 wap.guxs.net

    这几天研究了一下如何在web页面上通过telnet 连接一个远程的机器,通过命令行进行控制,让然,B/S架构的项目,如果直接通过

    浏览器是无法和远程机器进行通信的,我们就得借助后端来帮助实现这样的一个功能需求,具体的实现逻辑是:

    用户————>控制浏览器命令行界面————>发送命令到后端服务器————>后端服务器连接socket————>推送用户的命令

    telnet Server ————>后端服务器输入流接受返回字符——————>websocket 推送到前端完成交互

     

    telnet 

    可能很多人都知道ssh,估计很少会了解到关于telnet的东西,但是又结合起来说,其实两个都是一种协议,可以远程操控,

    但是telnet 在传输过程中存在着不安全的因素,因为传输都未经过加密,而都是明文,这就在远程连接中,很容易就会被抓包,出现问题,

    但SSH 就好比是加强版的telnet ,在传输过程中的数据进行加密,进而减少了被盗取的风险。并且所有的SSH都是经过压缩的,在网络上的

    传输速率也很优秀,这样多方面优秀的情况下,自然而然的就会代替掉telnet 

     

    并不是这样说telnet 就没什么用了,也不是这样子的,我们通过搭建这样一个demo 学习的是这样的搭建过程中去了解建立连接的过程以及交互的过程

    同样的,就算改编成SSH 其实也是这样的一个过程,学习就是一个不断探索的过程

     

     

    开始

    后端的话,从Springboot 入手,快速的搭建一个web工程,我们主要用这个web工程来接受前端发送过来的命令请求。

    包括:连接、断开、发送命令等等。

    最主要的,就是采用commons-net包下面的TelnetClient

            <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId>
                <version>3.6</version>
            </dependency>

    就好比我们的交换机作为一个Telnet的服务端,而我们的本机就作为一个Telnet的客户端,客户端发起请求,服务端相应,与B/S其实一样的

    这里我就摘一些关键的部分来进行讲解,其他的请clone 项目进行查看

     

    创建一个telnet 客户端

    其实创建一个telnet 客户端是很简单的,就只需要new一个对象,而后填写ip地址和端口,端口默认是23,可以不写,就打开了一个telnet的Connection

            telnetClient = new TelnetClient();
            telnetClient.connect(ip,port);
    
            inputStream = telnetClient.getInputStream();
            outputStream = telnetClient.getOutputStream();

    从客户端得到两个流,一个输入流,一个输出流,这里就会涉及到JAVA关于IO相关的知识,当然网络上一般通行都是采用字节流

    inputStream 输入流 outputStread 输出流

    对于输入流和输出流相对于模糊的小伙伴,这里给大家加深一下理解,从字面意思上理解

    输入流:就是输进来的

    输出流:就是丢出去的

    其实这样理解的话,丢失了一个基于的对象。那就是,到底是基于客户端还是服务端呢,我这里简单的画个图

    就好比你的程序要读取一个文件,这个时候就需要用到输入流,输入流提供一个read的方法

    我得把日志信息写入到日志文件里,这个时候就需要用到输出流,输出流提供一个write() 方法

    输出流有一个flush() 强制刷新的方法 强制清空和写入

    一个好的习惯,流用完之后要进行关闭!!!!!

     

    在当前的环境里面,输入流就好比是客户端给我们返回的数据,而输出流才是我们推送命令的

     

    输入命令

    切记在命令后加入一个换行符,这就好比我们在telnet 客户端上面操作的时候,写完一句就需要敲一个回车,一样的道理。

    通过输出流的write 方法写入到输出流里面,flush将输出流清空和强制写入命令。

        public String sendCommand(String send) throws IOException {
    
            //加入换行符
             send = send + "\n";
    
            if (null == telnetClient) {
                return "连接已关闭";
            }
            outputStream.write(send.getBytes());
            outputStream.flush();
    
            return "发送成功";
        }

     

    读取服务端的返回

    上面已经反复叙述过了,服务端的返回我们需要采用输入流进行接收,同样的,需要从流里面读取出我们需要的字节,并将其转换为字符

    通过webSocket 推送到前台进行展示

    这时候就需要起一个线程来操作了,因为你不知道什么时候回接收到推送的消息,所以这个线程还不能停掉,得设置为后台线程,让它在开启连接后一直

    在后台保持活动状态,这里就需要了解一下:守护线程

     

    守护线程 、后台线程

    通过给一个线程设置setDaemon(true) 的形式标记这个线程为守护线程,也就是后台线程,线程启动前必须启动这个线程

    对于停止这个线程的方法嘛 那就是执行中断,在这个线程的逻辑代码中判断是否中断,中断则跳出这个线程,线程执行完毕

    这个线程也就停掉了呗!

     

     

     通过new 一个线程类,主要看一下这个类的实现方法

    outputThread = new InputPrintThread(inputStream);
    
            //守护线程
            outputThread.setDaemon(true);
            outputThread.start();

    通过一个while 循环的方式时刻执行是否中断的方法和 对输入流进行读取,因为读取在读取不到字节的时候会发生阻塞,所以这样是很有必要的

    因为在读取不到的时候,会阻塞这个线程,若读取流在文件末尾,则会返回-1 我们只需要判断不是-1继续读取就好了

     

    注意:这里说的是:读取出一些字节,并不是所有的字节,一次返回过来的字节它可能会读取多次,所以不能只循环一次就判断这个就完了

    @Override
        public void run() {
    
            int num = 0;
            //字节缓冲
            char[] bytes = new char[1024];
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            try {
                //这里会发生阻塞,通过websocket推送进行
                while (!interrupted() && (num = inputStreamReader.read(bytes)) != -1) {
    
                    for (int i = 0; i < num; i++) {
                        char ab = bytes[i];
                        WebSocketServer.sendInfo(ab + "", SocketIdEnum.TELNET.getValue());
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

     

    webSocket 推送

    这一部分对于Springboot 来说整合WebSocket 简直是太简单了,一个POM依赖以及简单的几行配置即可开启

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-websocket</artifactId>
            </dependency>

    这里我就不细说了:我的内容也是参考这一篇文章:请参阅

    https://blog.csdn.net/moshowgame/article/details/80275084

     

    telnet 客户端的配置

    在windows 里面开启telnet 基本步骤:搜索windows功能

     

     

    找到并开始这一项即可,即可在命令行里面通过telnet + ip 进行远程访问,

     

    telnet 测试服务端

    很多小伙伴在昨晚后,不知如何去测试telnet的连通性以及代码的测试,缺少一个测试的环境

    手头又没有其他闲置的电脑或者是交换机,可以参考手头建立一个虚拟机的方式,这样也行,或者就

    采用华为的ENSP 创建一个虚拟的交换机后,通过自己电脑的虚拟网卡接入到虚拟交换机,这样其实也是可以通过telnet

    进行访问的,ENSP的安装这里略过,这里给一个链接:https://share.weiyun.com/5kmSEYr

     

    而后新建一个交换机通过虚拟网卡的映射进行连接后,通过本机PING 这台交换机的IP 若ping通则证明连接正常

     

     

    若不清楚配置交换机的telnet 可以参阅:https://www.cnblogs.com/pipci/p/8075686.html

    划分vlan 这些基础我就不细说了,自行参考

     

    测试效果

    对与一个写后台的人来说:前台这样子其实已经很不错了 

    哈哈 只能简单的写个窗口,然后将后台推送的内容push到页面上 

    因为是一个小的测试demo 有兴趣的可以进行改造升级更好的CSS美化

    小结

    关于研究这个web版本的telnet 其实还是涉及到很多东西,比如又再一次的学习到了流的概念以及

    之前从未知道这个输入流还会存在阻塞的问题 以及如何优雅的关闭流以及flush 强制刷新写入等诸多的问题

    虽然SSH已经是远程当中的主流,telnet 也未必没得用,总结一下总是好的。

     

    参考

    交换机telnet配置 https://www.cnblogs.com/pipci/p/8075686.html

    springboot 配置websocket https://www.cnblogs.com/pipci/p/8075686.html

     

    代码开源

    https://gitee.com/mrc1999/web-telnet

    展开全文
  • JDK内置命令行工具

    千次阅读 2022-03-16 14:42:45
    java命令行 序号 接口 java Java 应用的启动程序 javac JDK 内置的编译工具 javap 反编译 class 文件的工具 javadoc 根据 Java 代码和标准注释,自动生成相关的 API 说明文档 javah JNI 开发时, 根据...

    java命令行

    序号接口
    javaJava 应用的启动程序
    javacJDK 内置的编译工具
    javap反编译 class 文件的工具
    javadoc根据 Java 代码和标准注释,自动生成相关的 API 说明文档
    javahJNI 开发时, 根据 java 代码生成需要的 .h文件
    extcheck检查某个 jar 文件和运行时扩展 jar 有没有版本冲突,很少使用
    jdbJava Debugger ; 可以调试本地和远端程序,属于 JPDA 中的一个 demo 实现,供其他调试器参考。开发时很少使用
    jdeps探测 class 或 jar 包需要的依赖
    jar打包工具,可以将文件和目录打包成为 .jar 文件;.jar 文件本质上就是 zip 文件, 只是后缀不同。使用时按顺序对应好选项和参数即可。
    keytool安全证书和密钥的管理工具; (支持生成、导入、导出等操作)
    jarsignerJAR 文件签名和验证工具
    policytool实际上这是一款图形界面工具, 管理本机的 Java 安全策略
    jps/jinfo查看 java 进程
    jstat查看 JVM 内部 gc 相关信息
    jmap查看 heap 或类占用空间统计
    jstack查看线程信息
    jcmd执行 JVM 相关分析命令(整合命令)
    jrunscript/jjs执行 js 命令

    一. jps

    1. jps:查看当前 java 进程

    18724 NodeManager
    18280 SecondaryNameNode
    20651 HMaster
    17357 QuorumPeerMain
    20848 HRegionServer
    17841 NameNode
    400340 Kafka
    18038 DataNode
    18550 ResourceManager
    702428 Jps
    21466 Worker
    21372 Master
    22269 jar
    

    2. jps -q: 只显示 java 进程号

    18724
    702447
    18280
    20651
    17357
    20848
    17841
    400340
    18038
    18550
    21466
    21372
    22269
    

    3. jps –l:输出主类或者 jar 的完全路径名

    702410 sun.tools.jps.Jps
    18724 org.apache.hadoop.yarn.server.nodemanager.NodeManager
    18280 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
    20651 org.apache.hadoop.hbase.master.HMaster
    17357 org.apache.zookeeper.server.quorum.QuorumPeerMain
    20848 org.apache.hadoop.hbase.regionserver.HRegionServer
    17841 org.apache.hadoop.hdfs.server.namenode.NameNode
    400340 kafka.Kafka
    18038 org.apache.hadoop.hdfs.server.datanode.DataNode
    18550 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
    21466 org.apache.spark.deploy.worker.Worker
    21372 org.apache.spark.deploy.master.Master
    22269 api-test.jar
    

    4. jps -m: 输出 main 方法的启动参数

    18724 NodeManager
    18280 SecondaryNameNode
    20651 HMaster start
    17357 QuorumPeerMain /opt/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
    20848 HRegionServer start
    17841 NameNode
    400340 Kafka ../config/server.properties
    702489 Jps -m
    18038 DataNode
    18550 ResourceManager
    21466 Worker --webui-port 8081 spark://172.29.38.64:7077
    21372 Master --host 172.29.38.64 --port 7077 --webui-port 8081
    22269 jar
    

    5. jps -v: 输出jvm参数

    18724 NodeManager -Dproc_nodemanager -Djava.net.preferIPv4Stack=true -Dyarn.log.dir=/opt/software/hadoop-3.2.2/logs -Dyarn.log.file=hadoop-root-nodemanager-ashen-friede.log -Dyarn.home.dir=/opt/software/hadoop-3.2.2 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/software/hadoop-3.2.2/lib/native -Dhadoop.log.dir=/opt/software/hadoop-3.2.2/logs -Dhadoop.log.file=hadoop-root-nodemanager-ashen-friede.log -Dhadoop.home.dir=/opt/software/hadoop-3.2.2 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,RFA -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender
    18280 SecondaryNameNode -Dproc_secondarynamenode -Djava.net.preferIPv4Stack=true -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,RFAS -Dyarn.log.dir=/opt/software/hadoop-3.2.2/logs -Dyarn.log.file=hadoop-root-secondarynamenode-ashen-friede.log -Dyarn.home.dir=/opt/software/hadoop-3.2.2 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/software/hadoop-3.2.2/lib/native -Dhadoop.log.dir=/opt/software/hadoop-3.2.2/logs -Dhadoop.log.file=hadoop-root-secondarynamenode-ashen-friede.log -Dhadoop.home.dir=/opt/software/hadoop-3.2.2 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,RFA -Dhadoop.policy.file=hadoop-policy.xml
    20651 HMaster -Dproc_master -XX:OnOutOfMemoryError=kill -9 %p -XX:+UseConcMarkSweepGC -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m -Dhbase.log.dir=/opt/software/hbase-1.4.13/logs -Dhbase.log.file=hbase-root-master-ashen-friede.log -Dhbase.home.dir=/opt/software/hbase-1.4.13 -Dhbase.id.str=root -Dhbase.root.logger=INFO,RFA -Djava.library.path=/opt/software/hadoop-3.2.2/lib:/opt/software/hadoop-3.2.2/lib/native -Dhbase.security.logger=INFO,RFAS
    17357 QuorumPeerMain -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false
    20848 HRegionServer -Dproc_regionserver -XX:OnOutOfMemoryError=kill -9 %p -XX:+UseConcMarkSweepGC -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m -Dhbase.log.dir=/opt/software/hbase-1.4.13/bin/../logs -Dhbase.log.file=hbase-root-regionserver-ashen-friede.log -Dhbase.home.dir=/opt/software/hbase-1.4.13/bin/.. -Dhbase.id.str=root -Dhbase.root.logger=INFO,RFA -Dhbase.security.logger=INFO,RFAS
    17841 NameNode -Dproc_namenode -Djava.net.preferIPv4Stack=true -Dhdfs.audit.logger=INFO,NullAppender -Dhadoop.security.logger=INFO,RFAS -Dyarn.log.dir=/opt/software/hadoop-3.2.2/logs -Dyarn.log.file=hadoop-root-namenode-ashen-friede.log -Dyarn.home.dir=/opt/software/hadoop-3.2.2 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/software/hadoop-3.2.2/lib/native -Dhadoop.log.dir=/opt/software/hadoop-3.2.2/logs -Dhadoop.log.file=hadoop-root-namenode-ashen-friede.log -Dhadoop.home.dir=/opt/software/hadoop-3.2.2 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,RFA -Dhadoop.policy.file=hadoop-policy.xml
    400340 Kafka -Xmx1G -Xms1G -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLevel=15 -Djava.awt.headless=true -Xloggc:/opt/software/kafka_2.12-3.0.0/bin/../logs/kafkaServer-gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dkafka.logs.dir=/opt/software/kafka_2.12-3.0.0/bin/../logs -Dlog4j.configuration=file:./../config/log4j.properties
    702527 Jps -Denv.class.path=.:/usr/java/jdk1.8.0_151/lib/dt.jar:/usr/java/jdk1.8.0_151/lib/tools.jar:/opt/software/hadoop-3.2.2/lib/*.jar:/opt/software/hadoop-3.2.2/share/hadoop/client/*.jar:/opt/software/hadoop-3.2.2/share/hadoop/common/*.jar:/opt/software/hadoop-3.2.2/share/hadoop/hdfs/*.jar:/opt/software/hadoop-3.2.2/share/hadoop/mapreduce/*.jar:/opt/software/hadoop-3.2.2/share/hadoop/yarn/*.jar:/opt/software/hbase-1.4.13/lib/ -Dapplication.home=/usr/java/jdk1.8.0_151 -Xms8m
    18038 DataNode -Dproc_datanode -Djava.net.preferIPv4Stack=true -Dhadoop.security.logger=ERROR,RFAS -Dyarn.log.dir=/opt/software/hadoop-3.2.2/logs -Dyarn.log.file=hadoop-root-datanode-ashen-friede.log -Dyarn.home.dir=/opt/software/hadoop-3.2.2 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/software/hadoop-3.2.2/lib/native -Dhadoop.log.dir=/opt/software/hadoop-3.2.2/logs -Dhadoop.log.file=hadoop-root-datanode-ashen-friede.log -Dhadoop.home.dir=/opt/software/hadoop-3.2.2 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,RFA -Dhadoop.policy.file=hadoop-policy.xml
    18550 ResourceManager -Dproc_resourcemanager -Djava.library.path=/opt/software/hadoop-3.2.2/lib:/opt/software/hadoop-3.2.2/lib/native -Dservice.libdir=/opt/software/hadoop-3.2.2/share/hadoop/yarn,/opt/software/hadoop-3.2.2/share/hadoop/yarn/lib,/opt/software/hadoop-3.2.2/share/hadoop/hdfs,/opt/software/hadoop-3.2.2/share/hadoop/hdfs/lib,/opt/software/hadoop-3.2.2/share/hadoop/common,/opt/software/hadoop-3.2.2/share/hadoop/common/lib -Dyarn.log.dir=/opt/software/hadoop-3.2.2/logs -Dyarn.log.file=hadoop-root-resourcemanager-ashen-friede.log -Dyarn.home.dir=/opt/software/hadoop-3.2.2 -Dyarn.root.logger=INFO,console -Dhadoop.log.dir=/opt/software/hadoop-3.2.2/logs -Dhadoop.log.file=hadoop-root-resourcemanager-ashen-friede.log -Dhadoop.home.dir=/opt/software/hadoop-3.2.2 -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,RFA -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender
    21466 Worker -Xmx1g
    21372 Master -Xmx1g
    22269 jar
    

    二.jinfo

    1. jinfo -[pid]

    输出全部的参数和系统属性

    Attaching to process ID 22269, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.151-b12
    Java System Properties:
    
    java.runtime.name = Java(TM) SE Runtime Environment
    java.vm.version = 25.151-b12
    sun.boot.library.path = /usr/java/jdk1.8.0_151/jre/lib/amd64
    java.protocol.handler.pkgs = org.springframework.boot.loader
    java.vendor.url = http://java.oracle.com/
    java.vm.vendor = Oracle Corporation
    path.separator = :
    file.encoding.pkg = sun.io
    java.vm.name = Java HotSpot(TM) 64-Bit Server VM
    sun.os.patch.level = unknown
    sun.java.launcher = SUN_STANDARD
    user.country = US
    user.dir = /server/api-test
    java.vm.specification.name = Java Virtual Machine Specification
    PID = 22269
    java.runtime.version = 1.8.0_151-b12
    java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
    os.arch = amd64
    java.endorsed.dirs = /usr/java/jdk1.8.0_151/jre/lib/endorsed
    line.separator = 
    
    java.io.tmpdir = /tmp
    java.vm.specification.vendor = Oracle Corporation
    os.name = Linux
    sun.jnu.encoding = UTF-8
    java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
    spring.beaninfo.ignore = true
    java.specification.name = Java Platform API Specification
    java.class.version = 52.0
    sun.management.compiler = HotSpot 64-Bit Tiered Compilers
    os.version = 4.18.0-348.2.1.el8_5.x86_64
    user.home = /root
    user.timezone = Asia/Shanghai
    catalina.useNaming = false
    java.awt.printerjob = sun.print.PSPrinterJob
    file.encoding = UTF-8
    java.specification.version = 1.8
    catalina.home = /tmp/tomcat.7513305814779239686.8086
    user.name = root
    java.class.path = api-test.jar
    java.vm.specification.version = 1.8
    sun.arch.data.model = 64
    sun.java.command = api-test.jar
    java.home = /usr/java/jdk1.8.0_151/jre
    user.language = en
    java.specification.vendor = Oracle Corporation
    awt.toolkit = sun.awt.X11.XToolkit
    java.vm.info = mixed mode
    java.version = 1.8.0_151
    java.ext.dirs = /usr/java/jdk1.8.0_151/jre/lib/ext:/usr/java/packages/lib/ext
    sun.boot.class.path = /usr/java/jdk1.8.0_151/jre/lib/resources.jar:/usr/java/jdk1.8.0_151/jre/lib/rt.jar:/usr/java/jdk1.8.0_151/jre/lib/sunrsasign.jar:/usr/java/jdk1.8.0_151/jre/lib/jsse.jar:/usr/java/jdk1.8.0_151/jre/lib/jce.jar:/usr/java/jdk1.8.0_151/jre/lib/charsets.jar:/usr/java/jdk1.8.0_151/jre/lib/jfr.jar:/usr/java/jdk1.8.0_151/jre/classes
    java.awt.headless = true
    java.vendor = Oracle Corporation
    catalina.base = /tmp/tomcat.7513305814779239686.8086
    file.separator = /
    java.vendor.url.bug = http://bugreport.sun.com/bugreport/
    sun.io.unicode.encoding = UnicodeLittle
    sun.cpu.endian = little
    sun.cpu.isalist = 
    
    VM Flags:
    Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=127926272 -XX:MaxHeapSize=2038431744 -XX:MaxNewSize=679477248 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=42467328 -XX:OldSize=85458944 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 
    Command line:  
    
    

    2. jinfo -flag [name] pid

    输出对应名称的参数:

    jinfo -flag MaxHeapSize 22269
    

    输出:

    [root@ashen-friede ~]# jinfo -flag MaxHeapSize 22269
    -XX:MaxHeapSize=2038431744
    

    3. jinfo -flag [+|-][name] pid

    在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用。

    减少配置

    jinfo -flag -PrintGC 22269
    
    [root@ashen-friede ~]# jinfo -flag -PrintGC 22269
    [root@ashen-friede ~]# jinfo -flag PrintGC 22269
    -XX:-PrintGC
    

    增加配置

    jinfo -flag +PrintGC 22269
    
    [root@ashen-friede ~]# jinfo -flag +PrintGC 22269
    [root@ashen-friede ~]# jinfo -flag PrintGC 22269
    -XX:+PrintGC
    

    4. jinfo -flag [name]=[value] pid

    在不重启虚拟机的情况下,可以动态的修改 jvm 的参数值。尤其在线上的环境特别有用。

    jinfo -flag HeapDumpPath=/mnt/test.hprof 22269
    

    输出:

    [root@ashen-friede ~]# jinfo -flag HeapDumpPath 22269
    -XX:HeapDumpPath=
    [root@ashen-friede ~]# jinfo -flag HeapDumpPath=/mnt/test.hprof 22269
    [root@ashen-friede ~]# jinfo -flag HeapDumpPath 22269
    -XX:HeapDumpPath=/mnt/test.hprof
    

    并不是所有的参数都支持动态修改

    5. jinfo -flags pid

    输出全部的参数

    jinfo -flags 22269
    

    输出:

    [root@ashen-friede ~]# jinfo -flags 22269
    Attaching to process ID 22269, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.151-b12
    Non-default VM flags: -XX:CICompilerCount=3 -XX:HeapDumpPath=null -XX:InitialHeapSize=127926272 -XX:MaxHeapSize=2038431744 -XX:MaxNewSize=679477248 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=42467328 -XX:OldSize=85458944 -XX:-PrintGC -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 
    Command line:  
    

    6. jinfo -sysprops pid

    jinfo -sysprops 22269
    

    输出:

    [root@ashen-friede ~]# jinfo -sysprops 22269
    Attaching to process ID 22269, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.151-b12
    java.runtime.name = Java(TM) SE Runtime Environment
    java.vm.version = 25.151-b12
    sun.boot.library.path = /usr/java/jdk1.8.0_151/jre/lib/amd64
    java.protocol.handler.pkgs = org.springframework.boot.loader
    java.vendor.url = http://java.oracle.com/
    java.vm.vendor = Oracle Corporation
    path.separator = :
    file.encoding.pkg = sun.io
    java.vm.name = Java HotSpot(TM) 64-Bit Server VM
    sun.os.patch.level = unknown
    sun.java.launcher = SUN_STANDARD
    user.country = US
    user.dir = /server/api-test
    java.vm.specification.name = Java Virtual Machine Specification
    PID = 22269
    java.runtime.version = 1.8.0_151-b12
    java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
    os.arch = amd64
    java.endorsed.dirs = /usr/java/jdk1.8.0_151/jre/lib/endorsed
    line.separator = 
    
    java.io.tmpdir = /tmp
    java.vm.specification.vendor = Oracle Corporation
    os.name = Linux
    sun.jnu.encoding = UTF-8
    java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
    spring.beaninfo.ignore = true
    java.specification.name = Java Platform API Specification
    java.class.version = 52.0
    sun.management.compiler = HotSpot 64-Bit Tiered Compilers
    os.version = 4.18.0-348.2.1.el8_5.x86_64
    user.home = /root
    user.timezone = Asia/Shanghai
    catalina.useNaming = false
    java.awt.printerjob = sun.print.PSPrinterJob
    file.encoding = UTF-8
    java.specification.version = 1.8
    catalina.home = /tmp/tomcat.7513305814779239686.8086
    user.name = root
    java.class.path = api-test.jar
    java.vm.specification.version = 1.8
    sun.arch.data.model = 64
    sun.java.command = api-test.jar
    java.home = /usr/java/jdk1.8.0_151/jre
    user.language = en
    java.specification.vendor = Oracle Corporation
    awt.toolkit = sun.awt.X11.XToolkit
    java.vm.info = mixed mode
    java.version = 1.8.0_151
    java.ext.dirs = /usr/java/jdk1.8.0_151/jre/lib/ext:/usr/java/packages/lib/ext
    sun.boot.class.path = /usr/java/jdk1.8.0_151/jre/lib/resources.jar:/usr/java/jdk1.8.0_151/jre/lib/rt.jar:/usr/java/jdk1.8.0_151/jre/lib/sunrsasign.jar:/usr/java/jdk1.8.0_151/jre/lib/jsse.jar:/usr/java/jdk1.8.0_151/jre/lib/jce.jar:/usr/java/jdk1.8.0_151/jre/lib/charsets.jar:/usr/java/jdk1.8.0_151/jre/lib/jfr.jar:/usr/java/jdk1.8.0_151/jre/classes
    java.awt.headless = true
    java.vendor = Oracle Corporation
    catalina.base = /tmp/tomcat.7513305814779239686.8086
    file.separator = /
    java.vendor.url.bug = http://bugreport.sun.com/bugreport/
    sun.io.unicode.encoding = UnicodeLittle
    sun.cpu.endian = little
    sun.cpu.isalist = 
    

    三. jstat

    对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控.

    1.jstat -class [pid]

    显示加载class的数量,及所占空间等信息。

    jstat -class 22269
    
    [root@ashen-friede ~]# jstat -class 22269
    Loaded  Bytes  Unloaded  Bytes     Time   
      7604 13807.4        1     0.9       4.30
    
    说明
    Loaded装载的类的数量
    Bytes装载类所占用的字节数
    Unloaded卸载类的数量
    Bytes卸载类的字节数
    Time装载和卸载类所花费的时间

    2.jstat -compiler [pid]

    JIT 即时编译器相关的统计信息

    jstat -compiler 22269
    

    输出:

    [root@ashen-friede ~]# jstat -compiler 22269
    Compiled Failed Invalid   Time   FailedType FailedMethod
        6540      0       0    21.65          0         
    
    说明
    Compiled编译任务执行数量
    Failed编译任务执行失败数量
    Invalid编译任务执行失效数量
    Time编译任务消耗时间
    FailedType最后一个编译失败任务的类型
    FailedMethod最后一个编译失败任务所在的类及方法

    3.jstat -gc [pid] [time默认毫秒]

    显示gc的信息,查看gc的次数,及时间

    3.1 打印 gc 信息
    jstat -gc 22269
    

    输出:

    [root@ashen-friede ~]# jstat -gc 22269
     S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
    5120.0 8192.0 5008.2  0.0   256000.0 145335.5  97280.0    15881.1   43056.0 41137.6 5424.0 5067.7     12    0.129   2      0.180    0.309
    
    说明
    S0C年轻代中第一个survivor(幸存区)的容量(字节)
    S1C年轻代中第二个survivor(幸存区)的容量(字节)
    S0U年轻代中第一个survivor(幸存区)目前已使用空间(字节)
    S1U年轻代中第二个survivor(幸存区)目前已使用空间(字节)
    EC年轻代中Eden(伊甸园)的容量(字节)
    EU年轻代中Eden(伊甸园)目前已使用空间(字节)
    OCOld代的容量(字节)
    OUOld代目前已使用空间(字节)
    PCPerm(持久代)的容量(字节)
    PUPerm(持久代)目前已使用空间(字节)
    YGC从应用程序启动到采样时年轻代中gc次数
    YGCT从应用程序启动到采样时年轻代中gc所用时间(s)
    FGC从应用程序启动到采样时old代(全gc)gc次数
    FGCT从应用程序启动到采样时old代(全gc)gc所用时间(s)
    GCT从应用程序启动到采样时gc用的总时间(s)
    3.2 每隔 5s 打印 gc 信息
    jstat -gc 22269 5000
    

    输出:

    [root@ashen-friede ~]# jstat -gc 22269 5000
     S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
    5120.0 8192.0 5008.2  0.0   256000.0 145335.5  97280.0    15881.1   43056.0 41137.6 5424.0 5067.7     12    0.129   2      0.180    0.309
    5120.0 8192.0 5008.2  0.0   256000.0 145335.5  97280.0    15881.1   43056.0 41137.6 5424.0 5067.7     12    0.129   2      0.180    0.309
    5120.0 8192.0 5008.2  0.0   256000.0 145335.5  97280.0    15881.1   43056.0 41137.6 5424.0 5067.7     12    0.129   2      0.180    0.309
    5120.0 8192.0 5008.2  0.0   256000.0 145335.5  97280.0    15881.1   43056.0 41137.6 5424.0 5067.7     12    0.129   2      0.180    0.309
    5120.0 8192.0 5008.2  0.0   256000.0 145335.5  97280.0    15881.1   43056.0 41137.6 5424.0 5067.7     12    0.129   2      0.180    0.309
    5120.0 8192.0 5008.2  0.0   256000.0 145335.5  97280.0    15881.1   43056.0 41137.6 5424.0 5067.7     12    0.129   2      0.180    0.309
    5120.0 8192.0 5008.2  0.0   256000.0 145335.5  97280.0    15881.1   43056.0 41137.6 5424.0 5067.7     12    0.129   2      0.180    0.309
    5120.0 8192.0 5008.2  0.0   256000.0 145335.5  97280.0    15881.1   43056.0 41137.6 5424.0 5067.7     12    0.129   2      0.180    0.309
    5120.0 8192.0 5008.2  0.0   256000.0 145335.5  97280.0    15881.1   43056.0 41137.6 5424.0 5067.7     12    0.129   2      0.180    0.309
    
    3.3 每隔 10 行打印表头, 每隔 1s 打印一次gc信息 并打印 jar 包启动时间
     jstat -gc -h 10 -t 703842 1s
    

    输出:

    [root@ashen-friede mnt]# jstat -gc -h 10 -t 703842 1s
    Timestamp        S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
             8089.5 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8090.5 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8091.5 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8092.5 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8093.5 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8094.5 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8095.5 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8096.5 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8097.5 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8098.6 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
    Timestamp        S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
             8099.6 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8100.6 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8101.6 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8102.6 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8103.6 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
             8104.6 9216.0 9728.0  0.0    0.0   188928.0 27366.1   107520.0   15647.1   38912.0 36872.3 5120.0 4726.8      9    0.115   3      0.304    0.420
    
    
    参数接口
    -h [count]每隔十行打印一次表头
    -t打印时间, 该时间为系统启动的秒数

    4.jstat -gccapacity [pid]

    打印各个内存池分代空间的容量

    jstat -gccapacity 703842
    
    [root@ashen-friede api-test]# jstat -gccapacity 703842
     NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 
     41472.0 663552.0 208384.0 6144.0 9728.0 188928.0    83456.0  1327104.0    87040.0    87040.0      0.0 1079296.0  35456.0      0.0 1048576.0   4736.0      8     2
    
    说明
    NGCMN年轻代(young)中初始化(最小)的大小(字节)
    NGCMX年轻代(young)的最大容量(字节)
    NGC年轻代(young)中当前的容量(字节)
    S0C年轻代中第一个survivor(幸存区)的容量(字节)
    S1C年轻代中第二个survivor(幸存区)的容量(字节)
    EC年轻代中Eden(伊甸园)的容量(字节)
    OGCMNold代中初始化(最小)的大小(字节)
    OGCMXold代的最大容量(字节)
    OGCold代当前新生成的容量(字节)
    OCOld代的容量(字节)
    PGCMNperm代中初始化(最小)的大小(字节)
    PGCMXperm代的最大容量(字节)
    PGCperm代当前新生成的容量(字节)
    PCPerm(持久代)的容量(字节)
    YGC从应用程序启动到采样时年轻代中gc次数
    FGC从应用程序启动到采样时old代(全gc)gc次数

    其他用法与 -gc 类似

    5.jstat -gcutil [pid]

    GC 相关区域的使用率(utilization)统计

    jstat -gcutil 703842
    

    输出:

    [root@ashen-friede api-test]# jstat -gcutil 703842
      S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
      0.00   0.00  65.87  18.50  95.85  91.98      8    0.101     2    0.194    0.294
    
    说明
    S0年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
    S1年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
    E年轻代中Eden(伊甸园)已使用的占当前容量百分比
    Oold代已使用的占当前容量百分比
    Pperm代已使用的占当前容量百分比
    YGC从应用程序启动到采样时年轻代中gc次数
    YGCT从应用程序启动到采样时年轻代中gc所用时间(s)
    FGC从应用程序启动到采样时old代(全gc)gc次数
    FGCT从应用程序启动到采样时old代(全gc)gc所用时间(s)
    GCT从应用程序启动到采样时gc用的总时间(s)

    其他用法与 -gc 类似

    6.jstat -gccause [pid]

    看上次 GC,本次 GC(如果正在 GC 中)的原因, 其他输出和 -gcutil 选项一致

    jstat -gccause 703842
    

    输出:

    [root@ashen-friede api-test]# jstat -gccause 703842
      S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 
      0.00   0.00  65.87  18.50  95.85  91.98      8    0.101     2    0.194    0.294 Metadata GC Threshold No GC 
    
    说明
    LGCC上次垃圾回收的原因
    GCC当前垃圾回收的原因

    其他参数与 -gcutil 一致

    7.jstat -gcnew [pid]

    年轻代的统计信息。(New = Young = Eden + S0 + S1) -gcnewcapacity 年轻代空间大小统计

    jstat -gcnew 703842
    

    输出:

    [root@ashen-friede api-test]# jstat -gcnew 703842
     S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT  
    6144.0 9728.0    0.0    0.0  3  15 9728.0 188928.0 124448.4      8    0.101
    
    说明
    S0C年轻代中第一个survivor(幸存区)的容量(字节)
    S1C年轻代中第二个survivor(幸存区)的容量(字节)
    S0U年轻代中第一个survivor(幸存区)目前已使用空间(字节)
    S1U年轻代中第二个survivor(幸存区)目前已使用空间(字节)
    TT持有次数限制
    MTT最大持有次数限制
    EC年轻代中Eden(伊甸园)的容量(字节)
    EU年轻代中Eden(伊甸园)目前已使用空间(字节)
    YGC从应用程序启动到采样时年轻代中gc次数
    YGCT从应用程序启动到采样时年轻代中gc所用时间(s)

    8.jstat -gcold [pid]

    老年代和元数据区的行为统计

    jstat -gcold 703842
    

    输出:

    [root@ashen-friede api-test]# jstat -gcold 703842
       MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT   
     35456.0  33983.7   4736.0   4356.0     87040.0     16105.1      8     2    0.194    0.294
    
    说明
    MC方法区大小
    MU方法区使用大小
    CCSC压缩类空间大小
    CCSU压缩类空间使用大小
    OCOld代的容量(字节)
    OUOld代目前已使用空间(字节)
    YGC从应用程序启动到采样时年轻代中gc次数
    FGC从应用程序启动到采样时old代(全gc)gc次数
    FGCT从应用程序启动到采样时old代(全gc)gc所用时间(s)
    GCT从应用程序启动到采样时gc用的总时间(s)

    9.jstat -gcoldcapacity [pid]

    old代空间大小统计

    jstat -gcoldcapacity 703842
    

    输出:

    [root@ashen-friede api-test]# jstat -gcoldcapacity 703842
       OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT   
        83456.0   1327104.0     87040.0     87040.0     8     2    0.194    0.294
    
    说明
    OGCMN老年代最小容量
    OGCMX老年代最大容量
    OGC当前老年代大小
    OC老年代大小
    YGC年轻代垃圾回收次数
    FGC老年代垃圾回收次数
    FGCT老年代垃圾回收消耗时间
    GCT垃圾回收消耗总时间

    10.jstat -gcmetacapacity [pid]

    meta 区大小统计

    jstat -gcmetacapacity 703842
    

    输出:

    [root@ashen-friede api-test]# jstat -gcmetacapacity 703842
       MCMN       MCMX        MC       CCSMN      CCSMX       CCSC     YGC   FGC    FGCT     GCT   
           0.0  1079296.0    35456.0        0.0  1048576.0     4736.0     8     2    0.194    0.294
    
    
    说明
    MCMN最小元数据容量
    MCMX最大元数据容量
    MC当前元数据空间大小
    CCSMN最小压缩类空间大小
    CCSMX最大压缩类空间大小
    CCSC当前压缩类空间大小
    YGC年轻代垃圾回收次数
    FGC老年代垃圾回收次数
    FGCT老年代垃圾回收消耗时间
    GCT垃圾回收消耗总时间

    11.jstat -printcompilation [pid]

    打印 JVM 编译统计信息

    jstat -printcompilation 703842
    

    输出:

    [root@ashen-friede api-test]# jstat -printcompilation 703842
    Compiled  Size  Type Method
        3650   1020    1 sun/nio/ch/SelectorImpl lockAndDoSelect
    
    说明
    Compiled最近编译方法的数量
    Size最近编译方法的字节码数量
    Type最近编译方法的编译类型。
    Method方法名标识。

    四. jmap

    jmap命令是一个可以输出所有内存中对象的工具,甚至可以将 JVM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有对象的情况(产生那些对象,及其数量)。

    1.jmap -heap [pid]

    打印堆内存(/内存池)的配置和使用信息。

    jmap -heap 703842
    

    输出:

    [root@ashen-friede api-test]# jmap -heap 703842
    Attaching to process ID 703842, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.151-b12
    
    using thread-local object allocation.
    Parallel GC with 4 thread(s)
    
    Heap Configuration:
       MinHeapFreeRatio         = 0
       MaxHeapFreeRatio         = 100
       MaxHeapSize              = 2038431744 (1944.0MB)
       NewSize                  = 42467328 (40.5MB)
       MaxNewSize               = 679477248 (648.0MB)
       OldSize                  = 85458944 (81.5MB)
       NewRatio                 = 2
       SurvivorRatio            = 8
       MetaspaceSize            = 21807104 (20.796875MB)
       CompressedClassSpaceSize = 1073741824 (1024.0MB)
       MaxMetaspaceSize         = 17592186044415 MB
       G1HeapRegionSize         = 0 (0.0MB)
    
    Heap Usage:
    PS Young Generation
    Eden Space:
       capacity = 193462272 (184.5MB)
       used     = 127435120 (121.53160095214844MB)
       free     = 66027152 (62.96839904785156MB)
       65.87078642392869% used
    From Space:
       capacity = 6291456 (6.0MB)
       used     = 0 (0.0MB)
       free     = 6291456 (6.0MB)
       0.0% used
    To Space:
       capacity = 9961472 (9.5MB)
       used     = 0 (0.0MB)
       free     = 9961472 (9.5MB)
       0.0% used
    PS Old Generation
       capacity = 89128960 (85.0MB)
       used     = 16491624 (15.727638244628906MB)
       free     = 72637336 (69.2723617553711MB)
       18.503103817210476% used
    
    16170 interned Strings occupying 2168672 bytes.
    

    2.jmap -histo [pid]

    查看堆内存(histogram)中的对象数量,大小

    jmap -histo 703842
    
    说明
    num序号
    instances实例个数
    bytes字节数
    class name类名

    3.jmap -dump:format=b,file=[filename].hprof [pid]

    Dump 堆内存到 hprof 文件

    jmap -dump:format=b,file=/mnt/test.hprof 703842
    

    然后可以使用 jvisualvm 类似的工具查看

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xkqpSEHU-1647412936654)(3.png)]

    五. jstack

    jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息。

    1.jstack -l [pid]

    长列表模式,将线程相关的 locks 信息一起输出,比如持有的锁,等待的锁,死锁等信息

    jstack -l 703842
    
    [root@ashen-friede mnt]# jstack -l 703842
    2022-03-11 13:22:31
    Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.151-b12 mixed mode):
    
    "Attach Listener" #31 daemon prio=9 os_prio=0 tid=0x00007ff74c001000 nid=0xac04b waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "DestroyJavaVM" #30 prio=5 os_prio=0 tid=0x00007ff784009800 nid=0xabd63 waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-AsyncTimeout" #28 daemon prio=5 os_prio=0 tid=0x00007ff784dc3800 nid=0xabd84 waiting on condition [0x00007ff75028d000]
       java.lang.Thread.State: TIMED_WAITING (sleeping)
    	at java.lang.Thread.sleep(Native Method)
    	at org.apache.coyote.AbstractProtocol$AsyncTimeout.run(AbstractProtocol.java:1113)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-Acceptor-0" #27 daemon prio=5 os_prio=0 tid=0x00007ff784b29000 nid=0xabd83 runnable [0x00007ff75038e000]
       java.lang.Thread.State: RUNNABLE
    	at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
    	at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
    	at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
    	- locked <0x00000000de7a5c18> (a java.lang.Object)
    	at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:446)
    	at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:70)
    	at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:95)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-ClientPoller-1" #26 daemon prio=5 os_prio=0 tid=0x00007ff784c3b000 nid=0xabd82 runnable [0x00007ff75048f000]
       java.lang.Thread.State: RUNNABLE
    	at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
    	at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
    	at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
    	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
    	- locked <0x00000000de905e98> (a sun.nio.ch.Util$3)
    	- locked <0x00000000de905e88> (a java.util.Collections$UnmodifiableSet)
    	- locked <0x00000000de905d70> (a sun.nio.ch.EPollSelectorImpl)
    	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
    	at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:742)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-ClientPoller-0" #25 daemon prio=5 os_prio=0 tid=0x00007ff784c39000 nid=0xabd81 runnable [0x00007ff750590000]
       java.lang.Thread.State: RUNNABLE
    	at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
    	at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
    	at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
    	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
    	- locked <0x00000000de8f5570> (a sun.nio.ch.Util$3)
    	- locked <0x00000000de8f5560> (a java.util.Collections$UnmodifiableSet)
    	- locked <0x00000000de8f5448> (a sun.nio.ch.EPollSelectorImpl)
    	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
    	at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:742)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-exec-10" #24 daemon prio=5 os_prio=0 tid=0x00007ff784c37000 nid=0xabd80 waiting on condition [0x00007ff750691000]
       java.lang.Thread.State: WAITING (parking)
    	at sun.misc.Unsafe.park(Native Method)
    	- parking to wait for  <0x00000000de7fa610> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-exec-9" #23 daemon prio=5 os_prio=0 tid=0x00007ff784c31000 nid=0xabd7f waiting on condition [0x00007ff750792000]
       java.lang.Thread.State: WAITING (parking)
    	at sun.misc.Unsafe.park(Native Method)
    	- parking to wait for  <0x00000000de7fa610> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-exec-8" #22 daemon prio=5 os_prio=0 tid=0x00007ff784c2f000 nid=0xabd7e waiting on condition [0x00007ff750893000]
       java.lang.Thread.State: WAITING (parking)
    	at sun.misc.Unsafe.park(Native Method)
    	- parking to wait for  <0x00000000de7fa610> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-exec-7" #21 daemon prio=5 os_prio=0 tid=0x00007ff784c2d000 nid=0xabd7d waiting on condition [0x00007ff750994000]
       java.lang.Thread.State: WAITING (parking)
    	at sun.misc.Unsafe.park(Native Method)
    	- parking to wait for  <0x00000000de7fa610> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-exec-6" #20 daemon prio=5 os_prio=0 tid=0x00007ff784db9800 nid=0xabd7c waiting on condition [0x00007ff750a95000]
       java.lang.Thread.State: WAITING (parking)
    	at sun.misc.Unsafe.park(Native Method)
    	- parking to wait for  <0x00000000de7fa610> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-exec-5" #19 daemon prio=5 os_prio=0 tid=0x00007ff784db7800 nid=0xabd7b waiting on condition [0x00007ff750b96000]
       java.lang.Thread.State: WAITING (parking)
    	at sun.misc.Unsafe.park(Native Method)
    	- parking to wait for  <0x00000000de7fa610> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-exec-4" #18 daemon prio=5 os_prio=0 tid=0x00007ff784db6000 nid=0xabd7a waiting on condition [0x00007ff750c97000]
       java.lang.Thread.State: WAITING (parking)
    	at sun.misc.Unsafe.park(Native Method)
    	- parking to wait for  <0x00000000de7fa610> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-exec-3" #17 daemon prio=5 os_prio=0 tid=0x00007ff784b34000 nid=0xabd79 waiting on condition [0x00007ff750d98000]
       java.lang.Thread.State: WAITING (parking)
    	at sun.misc.Unsafe.park(Native Method)
    	- parking to wait for  <0x00000000de7fa610> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-exec-2" #16 daemon prio=5 os_prio=0 tid=0x00007ff784b33000 nid=0xabd78 waiting on condition [0x00007ff750e99000]
       java.lang.Thread.State: WAITING (parking)
    	at sun.misc.Unsafe.park(Native Method)
    	- parking to wait for  <0x00000000de7fa610> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "http-nio-8086-exec-1" #15 daemon prio=5 os_prio=0 tid=0x00007ff78481e000 nid=0xabd77 waiting on condition [0x00007ff750f9a000]
       java.lang.Thread.State: WAITING (parking)
    	at sun.misc.Unsafe.park(Native Method)
    	- parking to wait for  <0x00000000de7fa610> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "NioBlockingSelector.BlockPoller-1" #14 daemon prio=5 os_prio=0 tid=0x00007ff784c28800 nid=0xabd76 runnable [0x00007ff752476000]
       java.lang.Thread.State: RUNNABLE
    	at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
    	at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
    	at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
    	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
    	- locked <0x00000000de7a8860> (a sun.nio.ch.Util$3)
    	- locked <0x00000000de7a87d8> (a java.util.Collections$UnmodifiableSet)
    	- locked <0x00000000de7a8410> (a sun.nio.ch.EPollSelectorImpl)
    	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
    	at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:298)
    
       Locked ownable synchronizers:
    	- None
    
    "container-0" #13 prio=5 os_prio=0 tid=0x00007ff784f35000 nid=0xabd75 waiting on condition [0x00007ff7520ac000]
       java.lang.Thread.State: TIMED_WAITING (sleeping)
    	at java.lang.Thread.sleep(Native Method)
    	at org.apache.catalina.core.StandardServer.await(StandardServer.java:408)
    	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer$1.run(TomcatWebServer.java:181)
    
       Locked ownable synchronizers:
    	- None
    
    "ContainerBackgroundProcessor[StandardEngine[Tomcat]]" #12 daemon prio=5 os_prio=0 tid=0x00007ff784f2a000 nid=0xabd74 waiting on condition [0x00007ff75372d000]
       java.lang.Thread.State: TIMED_WAITING (sleeping)
    	at java.lang.Thread.sleep(Native Method)
    	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1365)
    	at java.lang.Thread.run(Thread.java:748)
    
       Locked ownable synchronizers:
    	- None
    
    "Service Thread" #8 daemon prio=9 os_prio=0 tid=0x00007ff7841b5000 nid=0xabd6f runnable [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "C1 CompilerThread2" #7 daemon prio=9 os_prio=0 tid=0x00007ff784187800 nid=0xabd6e waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "C2 CompilerThread1" #6 daemon prio=9 os_prio=0 tid=0x00007ff784186000 nid=0xabd6d waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007ff784183000 nid=0xabd6c waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007ff784181800 nid=0xabd6b runnable [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007ff78414a800 nid=0xabd6a in Object.wait() [0x00007ff76c13c000]
       java.lang.Thread.State: WAITING (on object monitor)
    	at java.lang.Object.wait(Native Method)
    	- waiting on <0x0000000086932c90> (a java.lang.ref.ReferenceQueue$Lock)
    	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
    	- locked <0x0000000086932c90> (a java.lang.ref.ReferenceQueue$Lock)
    	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
    	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
    
       Locked ownable synchronizers:
    	- None
    
    "Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007ff784146000 nid=0xabd69 in Object.wait() [0x00007ff76c23d000]
       java.lang.Thread.State: WAITING (on object monitor)
    	at java.lang.Object.wait(Native Method)
    	- waiting on <0x0000000086932c60> (a java.lang.ref.Reference$Lock)
    	at java.lang.Object.wait(Object.java:502)
    	at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
    	- locked <0x0000000086932c60> (a java.lang.ref.Reference$Lock)
    	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)
    
       Locked ownable synchronizers:
    	- None
    
    "VM Thread" os_prio=0 tid=0x00007ff78413e800 nid=0xabd68 runnable 
    
    "GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007ff78401f000 nid=0xabd64 runnable 
    
    "GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007ff784021000 nid=0xabd65 runnable 
    
    "GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007ff784022800 nid=0xabd66 runnable 
    
    "GC task thread#3 (ParallelGC)" os_prio=0 tid=0x00007ff784024800 nid=0xabd67 runnable 
    
    "VM Periodic Task Thread" os_prio=0 tid=0x00007ff7841b7800 nid=0xabd70 waiting on condition 
    
    JNI global references: 1085
    
    

    2.jstack -F [pid]

    强制执行 thread dump,可在 Java 进程卡死(hung 住)时使用,此选项可能需要系统权限。

    jstack -F 703842
    

    输出:

    Attaching to process ID 703842, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.151-b12
    Deadlock Detection:
    
    No deadlocks found.
    
    Thread 704587: (state = BLOCKED)
    
    
    Thread 703843: (state = BLOCKED)
    
    
    Thread 703876: (state = BLOCKED)
     - java.lang.Thread.sleep(long) @bci=0 (Compiled frame; information may be imprecise)
     - org.apache.coyote.AbstractProtocol$AsyncTimeout.run() @bci=10, line=1113 (Interpreted frame)
     - java.lang.Thread.run() @bci=11, line=748 (Interpreted frame)
    
    
    Thread 703875: (state = IN_NATIVE)
     - sun.nio.ch.ServerSocketChannelImpl.accept0(java.io.FileDescriptor, java.io.FileDescriptor, java.net.InetSocketAddress[]) @bci=0 (Interpreted frame)
     - sun.nio.ch.ServerSocketChannelImpl.accept(java.io.FileDescriptor, java.io.FileDescriptor, java.net.InetSocketAddress[]) @bci=4, line=422 (Interpreted frame)
     - sun.nio.ch.ServerSocketChannelImpl.accept() @bci=130, line=250 (Interpreted frame)
     - org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept() @bci=4, line=446 (Interpreted frame)
     - org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept() @bci=1, line=70 (Interpreted frame)
     - org.apache.tomcat.util.net.Acceptor.run() @bci=98, line=95 (Interpreted frame)
     - java.lang.Thread.run() @bci=11, line=748 (Interpreted frame)
    

    3.jstack -m [pid]

    混合模式(mixed mode),将 Java 帧和native 帧一起输出,此选项可能需要系统权限。

    jstack -m 703842
    

    输出:

    Attaching to process ID 703842, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.151-b12
    Deadlock Detection:
    
    No deadlocks found.
    
    ----------------- 703843 -----------------
    ----------------- 703844 -----------------
    ----------------- 703845 -----------------
    ----------------- 703846 -----------------
    ----------------- 703847 -----------------
    ----------------- 703848 -----------------
    ----------------- 703849 -----------------
    ----------------- 703850 -----------------
    ----------------- 703851 -----------------
    0x00007ff78cc4ecd6	do_futex_wait.constprop.1 + 0x36
    ----------------- 703852 -----------------
    ----------------- 703853 -----------------
    ----------------- 703854 -----------------
    ----------------- 703855 -----------------
    ----------------- 703856 -----------------
    ----------------- 703860 -----------------
    ----------------- 703861 -----------------
    ----------------- 703862 -----------------
    0x00007ff78c55c0f7	epoll_wait + 0x57
    ----------------- 703863 -----------------
    ----------------- 703864 -----------------
    ----------------- 703865 -----------------
    ----------------- 703866 -----------------
    ----------------- 703867 -----------------
    ----------------- 703868 -----------------
    ----------------- 703869 -----------------
    ----------------- 703870 -----------------
    ----------------- 703871 -----------------
    ----------------- 703872 -----------------
    ----------------- 703873 -----------------
    0x00007ff78c55c0f7	epoll_wait + 0x57
    0x5a5f00657275736f		????????
    ----------------- 703874 -----------------
    0x00007ff78c55c0f7	epoll_wait + 0x57
    0x7645636f6c657235		????????
    ----------------- 703875 -----------------
    0x00007ff78cc4fb07	__libc_accept + 0x47
    ----------------- 703876 -----------------
    ----------------- 704587 -----------------
    0x00007ff78cc4fb07	__libc_accept + 0x47
    ----------------- 703842 -----------------
    0x00007ff78cc4766d	__GI___pthread_timedjoin_ex + 0x18d
    
    

    4.jstack -l [pid] | grep ‘java.lang.Thread.State’ | wc -l

    统计现场个数

    jstack -l 703842 | grep 'java.lang.Thread.State' | wc -l
    

    输出:

    [root@ashen-friede mnt]# jstack -l 703842 | grep 'java.lang.Thread.State' | wc -l
    26
    

    5.查看 linux 系统占用 cpu 较高的线程信息

    5.1 top 查看cpu占用高进程

    [root@ashen-friede mnt]# top
    top - 13:40:26 up 50 days,  2:36,  2 users,  load average: 1.13, 1.07, 1.05
    Tasks: 152 total,   1 running, 144 sleeping,   7 stopped,   0 zombie
    %Cpu(s): 16.5 us,  9.7 sy,  0.0 ni, 73.4 id,  0.0 wa,  0.3 hi,  0.0 si,  0.0 st
    MiB Mem :   7768.1 total,    637.5 free,   6313.4 used,    817.3 buff/cache
    MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1186.9 avail Mem 
     Unknown command - try 'h' for help 
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                  
     226357 root      20   0  985480   6032   1376 S  99.7   0.1   4380:57 python3.7                                                                                                                                
     500552 root      20   0  989540  34172   3048 S   1.0   0.4 111:25.19 python3.7                                                                                                                                
      23077 root       1 -19 1011436  65836      4 S   0.7   0.8 449:53.73 jfsmount                                                                                                                                 
     495454 root      10 -10  184880  31432   8340 S   0.7   0.4 203:02.64 AliYunDun                                                                                                                                
     500551 root      20   0  807252  32568   4012 S   0.7   0.4 111:04.12 python3.7                                                                                                                                
      17841 root      20   0 3814460 291508  10268 S   0.3   3.7  48:38.10 java                                                                                                                                     
      18724 root      20   0 3816268 337620   9388 S   0.3   4.2  96:47.51 java                                                                                                                                     
      20848 root      20   0 3887612 292104   9724 S   0.3   3.7 129:23.67 java                                                                                                                                     
      21963 root      20   0 1322024  26828   6688 S   0.3   0.3 161:40.04 exe                                                                                                                                      
     400340 root      20   0 5937232   1.5g   9608 S   0.3  19.2 103:00.82 java                                                                                                                                     
     704190 root      20   0       0      0      0 I   0.3   0.0   0:03.53 kworker/3:3-events                                                                                                                       
          1 root      20   0  246524   6668   3732 S   0.0   0.1   0:55.32 systemd                                                                                                                                  
          2 root      20   0       0      0      0 S   0.0   0.0   0:01.20 kthreadd                                                                                                                                 
          3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                                                                                                   
          4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                                                                                                                               
          6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri                                                                                                              
          9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq                                                                                                                             
         10 root      20   0       0      0      0 S   0.0   0.0   0:04.15 ksoftirqd/0                                                                                                                              
         11 root      20   0       0      0      0 I   0.0   0.0  23:15.05 rcu_sched                                                                                                                                
         12 root      rt   0       0      0      0 S   0.0   0.0   0:00.05 migration/0                                                                                                                              
         13 root      rt   0       0      0      0 S   0.0   0.0   0:00.03 watchdog/0                                                                                                                               
         14 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0                                                                                                                                  
         15 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/1                                                                                                                                  
         16 root      rt   0       0      0      0 S   0.0   0.0   0:02.14 watchdog/1                                                                                                                               
         17 root      rt   0       0      0      0 S   0.0   0.0   0:00.04 migration/1                                                                                                                              
         18 root      20   0       0      0      0 S   0.0   0.0   0:02.63 ksoftirqd/1                                                                                                                              
         20 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/1:0H-events_highpri                                                                                                              
         21 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/2                                                                                                                                  
         22 root      rt   0       0      0      0 S   0.0   0.0   0:02.21 watchdog/2                                                                                                                               
         23 root      rt   0       0      0      0 S   0.0   0.0   0:00.05 migration/2                                                                                                                              
         24 root      20   0       0      0      0 S   0.0   0.0   0:03.36 ksoftirqd/2                                                                                                                              
         26 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/2:0H-events_highpri                                                                                                              
         27 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/3                                                                                                                                  
         28 root      rt   0       0      0      0 S   0.0   0.0   0:02.34 watchdog/3                                                                                                                               
         29 root      rt   0       0      0      0 S   0.0   0.0   0:00.05 migration/3     
    
    5.2 查看该进程下占用高 cpu 的线程
    top -H -p 18038
    

    输出:

    [root@ashen-friede mnt]# top -H -p 18038
    top - 13:48:40 up 50 days,  2:45,  2 users,  load average: 0.61, 0.92, 0.99
    Threads:  56 total,   0 running,  56 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  1.6 us,  1.6 sy,  0.0 ni, 96.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    MiB Mem :   7768.1 total,    641.1 free,   6309.3 used,    817.6 buff/cache
    MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1190.8 avail Mem 
    
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                  
      18038 root      20   0 3804188 255812   9508 S   0.0   3.2   0:00.00 java                                                                                                                                     
      18040 root      20   0 3804188 255812   9508 S   0.0   3.2   0:01.99 java                                                                                                                                     
      18041 root      20   0 3804188 255812   9508 S   0.0   3.2   0:00.67 java                                                                                                                                     
      18042 root      20   0 3804188 255812   9508 S   0.0   3.2   0:00.69 java                                                                                                                                     
      18043 root      20   0 3804188 255812   9508 S   0.0   3.2   0:00.68 java                                                                                                                                     
      18044 root      20   0 3804188 255812   9508 S   0.0   3.2   0:00.69 java                                                                                                                                     
      18045 root      20   0 3804188 255812   9508 S   0.0   3.2   1:09.25 java                                                                                                                                     
      18046 root      20   0 3804188 255812   9508 S   0.0   3.2   0:00.02 java                                                                                                                                     
      18047 root      20   0 3804188 255812   9508 S   0.0   3.2   0:00.02 java                                                                                                                                     
      18048 root      20   0 3804188 255812   9508 S   0.0   3.2   0:00.00 java                                                                                                                                     
      18049 root      20   0 3804188 255812   9508 S   0.0   3.2   0:19.32 java             
    

    5.3 转换线程ID

    printf "%x\n" 18040
    

    输出:

    [root@ashen-friede mnt]# printf "%x\n" 18040
    4678
    

    5.4 定位cpu占用线程

    jstack 18038|grep 4678 -A 30
    

    输出:

    [root@ashen-friede mnt]# jstack 18038|grep 4678 -A 30
    "Listener at 0.0.0.0/9867" #1 prio=5 os_prio=0 tid=0x00007f8f44014000 nid=0x4678 in Object.wait() [0x00007f8f4b922000]
       java.lang.Thread.State: WAITING (on object monitor)
    	at java.lang.Object.wait(Native Method)
    	- waiting on <0x0000000086f65320> (a java.lang.Thread)
    	at java.lang.Thread.join(Thread.java:1252)
    	- locked <0x0000000086f65320> (a java.lang.Thread)
    	at java.lang.Thread.join(Thread.java:1326)
    	at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.join(BPServiceActor.java:583)
    	at org.apache.hadoop.hdfs.server.datanode.BPOfferService.join(BPOfferService.java:358)
    	at org.apache.hadoop.hdfs.server.datanode.BlockPoolManager.joinAll(BlockPoolManager.java:143)
    	at org.apache.hadoop.hdfs.server.datanode.DataNode.join(DataNode.java:2773)
    	at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2909)
    	at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2931)
    
    "VM Thread" os_prio=0 tid=0x00007f8f44081800 nid=0x467d runnable 
    
    "GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f8f44029800 nid=0x4679 runnable 
    
    "GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f8f4402b000 nid=0x467a runnable 
    
    "GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007f8f4402d000 nid=0x467b runnable 
    
    "GC task thread#3 (ParallelGC)" os_prio=0 tid=0x00007f8f4402e800 nid=0x467c runnable 
    
    "VM Periodic Task Thread" os_prio=0 tid=0x00007f8f440d3800 nid=0x4685 waiting on condition 
    
    JNI global references: 387
    

    五. jcmd

    Jcmd 综合了前面的几个命令

    说明
    jcmd pid VM.uptime查看 JVM 的启动时长
    jcmd pid GC.class_histogram查看 JVM 的类信息,这个可以查看每个类的实例数量和占用空间大小。
    jcmd pid Thread.print查看 JVM 的Thread Dump
    jcmd pid GC.heap_dump [file_name]查看 JVM 的Heap Dump,注意,如果只指定文件名,默认会生成在启动 JVM 的目录里。
    jcmd pid VM.system_properties查看 JVM 的属性信息
    jcmd pid VM.flags查看 JVM 的启动参数,注意,可以看到 -X 和 -XX 的参数信息
    jcmd pid VM.command_line查看 JVM 的启动命令行
    jcmd pid GC.run_finalization对 JVM 执行 java.lang.System.runFinalization(),尽量b别去调用这个对象的finalize方法。
    jcmd pid GC.run对 JVM 执行 java.lang.System.gc(),告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的
    jcmd pid PerfCounter.print查看性能统计

    六. jrunscript/jjs

    1. 当 curl 命令用

    jrunscript -e "cat('http://www.baidu.com')"
    
    jrunscript -e "cat('http://8.142.187.127:8096/api-exchange/v/general_api/search_api?id=4eb726fc742d4bbda6476da1a869910f')"
    

    2. 执行 js 脚本片段

    jrunscript -e "print('hello, I am xiaohong')"
    

    3. 执行 js 文件

    function test(){
        console.log("Hello JS")
    }
    
    test()
    
    jrunscript -l js -f /mnt/test.js
    

    七. JVM 图形化工具

    1. jconsole

    在cmd命令行输入 jconsole 即可打开

    1. 本地 JVM 可以直接选择
    2. 远程 JVM 可以通过 JMX 方式连接
    nohup java -Djava.rmi.server.hostname=172.29.38.64 -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1507 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar api-exchange.jar &
    

    8.142.187.127:1507

    2. jvisualvm

    3. jmc

    4. idea 插件 VisualGC

    展开全文
  • 搁置 shelve是一个命令行工具,可下载tweet并将其提交到本地git存储库。 您可以根据需要将其配置为将提交推送到远程git存储库。
  • 用于将视频和图像发送到与airplay兼容的设备(如AppleTV)的命令行工具。 airplay协议基本上可以播放mpeg-4(mp4,mov,ts,m4v)格式的视频,这些视频可以通过http访问。 因此,要发送本地文件,将创建一个Web...
  • 命令行远程登录win服务器 内容精选换一换创建AVD的方式有两种,在桌面环境中创建AVD和以Shell命令行方式创建AVD,选择其中一种方式创建AVD即可。根据自己需求选择设备类型(分辨率)、版本、架构、皮肤、内存大小、...

    命令行远程登录win服务器 内容精选

    换一换

    c8a5a5028d2cabfeeee0907ef5119e7e.png

    创建AVD的方式有两种,在桌面环境中创建AVD和以Shell命令行方式创建AVD,选择其中一种方式创建AVD即可。根据自己需求选择设备类型(分辨率)、版本、架构、皮肤、内存大小、sdcard大小,单击OK,AVD即创建成功。创建Android 7.0 AVD:android create avd --name test_2 --targe

    版本升级后,节点管理页面显示节点状态为版本不匹配。升级过程中输入错误的节点服务器认证信息,导致节点升级失败。在Web服务器上执行版本不匹配节点的升级脚本。执行如下命令进入工具安装目录(“/opt/hyper_tuner”为工具安装目录,请根据实际情况替换)。cd /opt/hyper_tuner执行如下命令升级版本不匹配的节点。bash

    命令行远程登录win服务器 相关内容

    版本升级后,节点管理页面显示节点状态为版本不匹配。升级过程中输入错误的节点服务器认证信息,导致节点升级失败。在Web服务器上执行版本不匹配节点的升级脚本。执行如下命令进入工具安装目录(“/opt/hyper_tuner”为工具安装目录,请根据实际情况替换)。cd /opt/hyper_tuner执行如下命令升级版本不匹配的节点。bash

    远程桌面链接Windows云服务器报错:连接被拒绝,因为没有授权此用户账户进行远程登录。Windows远程桌面相关权限配置异常。在运行窗口输入secpol.msc,打开组策略编辑器打开"本地策略 > 用户权限分配 > 允许通过远程桌面服务登录"。本地策略包含已经被赋予远程登录服务器权限的用户组或单独的用户名。如果缺少上述配置,请单击“添加

    命令行远程登录win服务器 更多内容

    e08a3c1d383ce0289aa478984d9adca2.png

    已将所需升级的鲲鹏性能分析工具的软件包下载到本地。获取软件包后,需要校验软件包,确保与网站上的原始软件包一致,详细步骤请参见软件包校验。获取软件包后,需要校验软件包,确保与网站上的原始软件包一致,详细步骤请参见软件包校验。升级前请确认鲲鹏性能分析工具可以正常使用。升级前请确认安装空间至少保留原工具安装目录(默认为“/opt/hyper_t

    c98716077afa118c4722d3df701d5c06.png

    版本升级后,节点管理页面显示节点状态为版本不匹配。升级过程中输入错误的节点服务器认证信息,导致节点升级失败。在Web服务器上执行版本不匹配节点的升级脚本。执行如下命令进入工具安装目录(“/opt/hyper_tuner”为工具安装目录,请根据实际情况替换)。cd /opt/hyper_tuner执行如下命令升级版本不匹配的节点。bash

    0a0ca88b94963916c79cc35f28e2f501.png

    版本升级后,节点管理页面显示节点状态为版本不匹配。升级过程中输入错误的节点服务器认证信息,导致节点升级失败。在Web服务器上执行版本不匹配节点的升级脚本。执行如下命令进入工具安装目录(“/opt/hyper_tuner”为工具安装目录,请根据实际情况替换)。cd /opt/hyper_tuner执行如下命令升级版本不匹配的节点。bash

    9bf196c9a2e0b7b0bc69748c838418a5.png

    该步骤必须在root用户下执行,若以普通系统用户登录,需要执行su切换到root用户下执行后续操作。ssh-keygen -t rsa过程中需要:(可选)输入保存的文件名,默认为在/root/.ssh/id_rsa目录下保存为id_rsa(私钥)和id_rsa.pub(公钥)文件。(可选)设置密钥的密码口令。回显信息如下:ssh-copy

    91fba63c5e17e5f0e99d0f8174c4b31b.png

    只有运行中的云服务器云主机才允许用户登录。Windows操作系统用户名“Administrator”。首次登录云耀云服务器,请先通过“重置密码”功能设置登录密码。重置密码:选中待重置密码的云耀云服务器,并选择“操作”列下的“ 重置密码”。重置密码:选中待重置密码的云耀云服务器,并选择“操作”列下的“ 重置密码”。请根据需要选择登录方式,登

    1a97c4f052299ae736e0af6fa2667c80.png

    本节操作介绍在Windows和Linux环境中使用SSH密码方式登录Linux裸金属服务器的操作步骤。裸金属服务器状态必须为“运行中”。裸金属服务器已经绑定弹性公网IP,绑定方式请参见绑定弹性公网IP至服务器。已配置安全组入方向的访问规则,配置方式请参见添加安全组规则。使用的登录工具(如PuTTY)与待登录的裸金属服务器之间网络连通。例如

    628a76026f26a9b0192a8fa75416b71f.png

    版本升级后,节点管理页面显示节点状态为版本不匹配,如图1所示。升级过程中输入错误的节点服务器认证信息,导致节点升级失败。在Web服务器上执行版本不匹配节点的升级脚本。执行如下命令进入工具安装目录(“/opt/tuning_kit”为工具安装目录,请根据实际情况替换)。cd /opt/tuning_kit执行如下命令升级版本不匹配的节点。b

    ef7fa0a88cabe2097a016125d8d62832.png

    SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(访问方式为HTTPS),实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。SSL保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。鲲鹏性能分析工具支持SSL证书替换功能,为提高安全性,建议替换成自己的证书和公私钥对

    ea3d514774dda107c847f333927c833f.png

    已将所需升级的鲲鹏性能分析工具的软件包下载到本地。获取软件包后,需要校验软件包,确保与网站上的原始软件包一致,详细步骤请参见软件包校验。获取软件包后,需要校验软件包,确保与网站上的原始软件包一致,详细步骤请参见软件包校验。升级前请确认鲲鹏性能分析工具可以正常使用。升级前请确认安装空间至少保留原工具安装目录(默认为“/opt/tuning_

    631651361fa2e5698f6a9d681fb5668c.png

    报错信息:“Access denied for user 'user_name'@'100.xxx.xx.xx' (using password: YES)”。报错原因:ECS自建库用户名或密码不对。解决方法:请确认数据库用户名和密码是否正确。如果确认账户名和密码正确,可以通过客户端或命令行工具登录数据库,执行select * from

    a4c4c5b28481f97f2139da8bb7c47c58.png

    该步骤必须在root用户下执行,若以普通系统用户登录,需要执行su切换到root用户下执行后续操作。由于设置“kpti=off”后,系统安全性降低,禁止在生产环境上运行。执行如下命令编辑配置文件。vim /etc/grub2-efi.cfgvim /etc/grub2-efi.cfg定位到内核版本对应的开机启动项,在末尾增加“kpti=o

    展开全文
  • 节点库 + 命令行工具,用于在 Firefox OS 手机上执行基本的 Web 应用程序开发。 目前支持 安装应用 截屏 逻辑猫 重置 b2g 进程 关闭应用 启动应用程序 接下来来 卸载 基于@fabricedesr 在和 digitalrald 上的出色...
  • 该文档写于 2016年在银联基于数据驱动的方式落地了新一代清分系统,当时使用的IDEA工具还是Eclipse.放出来吧...也纯当是纪念了。
  • 通过web页面来实现一个类似SSH工具的功能,这在目前各种云平台上已经是必备功能了。这分享一下我对如何实现该功能的一些探索和实践。
  • 构建脚手架命令行工具 我们这一章节呢,来总结下构建脚手架的基本过程,总的来说呢,过程也是相当愉快轻松的,愉快,心情完美 ~ 安装依赖 首先我们需要安装构建脚手架所需要的依赖,如下: cnpm install -D ...
  • xTerminal是一个多终端的远程Web Shell工具。你可以通过浏览器根据特定的设备MAC地址登录到你的Linux设备。 它非常适合公司对公司部署在全球各地的成千上万的Linux设备进行远程调试。它基于evmongoose实现,由客户端...
  • 实验室:通过多语言 Web shell 上传远程执行代码
  • Unix/Linux的命令行工具

    千次阅读 2014-06-01 22:37:43
    缘起 今天,Theoldreader发邮件给我,说我有62天没有访问了。由于临近毕业,毕业论文...下面以Kristóf Kovács收集的28个Unix/Linux下命令行下的工具(原文链接)为基础,整合28个Unix/Linux的命令行神器中的介绍,
  • 这是个什么东西作为程序员不可避免的会与命令行打交道。我们会用很多的命令行工具,甚至自己开发一些命令行工具。那么如何将一个命令行工具转成 web 页面,变成一个「云端应用」,方便地与队友共享...
  • Git中存在两种类型的仓库,即本地仓库和远程仓库。
  • 命令行工具 作为一名WEB程序员熟练的命令行操作是必不可少的,在开发过程中有很多操作都会使用到命令行,例如: 使用Git版本控制 ssh连接远程Linux服务器 管理本地虚拟机及站点 这里小编就推荐大家几个和命令行...
  • 每个Web开发者都该了解的12条命令行

    千次阅读 多人点赞 2019-06-04 10:21:53
    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能...在开发者的弹药箱里,命令行是最具生产力的工具之一。掌握它们可以给你的工作流程带来非常积极的影响。因为,许多日常任务...
  • 关闭 使用shutdown命令实现局域网内远程关机、重启整蛊他人 用法: shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/f] [/m \\compu ... windows远程关机重启 windows远程关机 ...
  • 文章主要介绍了非公网IP用户如何直接穿透家庭路由器,通过命令行一键唤醒内网计算机,实现远程开机。
  • 1、我们需要获得远程服务器上的某个文件,远程服务器既没有配置ftp服务器,没有开启web服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过scp命令便可轻松的达到目的。 2、我们需要将本机上的文件...
  • Spring Boot 实现在线Web SSH( Java Web版本的Xsehll)

    千次阅读 多人点赞 2021-01-28 17:13:11
    以及联想到Alibaba开源的Java诊断工具Arthas,其Web Console在浏览器上就可以执行命令,操作简单,界面也非常的nice。 然后就想着去实现一个自己的Web SSH,去探究其内部的原理。 扩展:什么是堡垒机 堡垒机,即在...
  • CSVKit 是如此神奇!它使用逗号分隔值执行所需的一切。 您可以通过 cvs cut 剪切列,使用 cvsgrip 过滤列,通过 sql2csv ...快速工具推荐: 1、agate —— Python 数据分析库。 agate 原名为 journalism。是针对人...
  • WEB漏洞—RCE 代码及命令执行漏洞

    千次阅读 2022-01-21 19:59:01
    指的是远程命令/代码执行(remote command/code execute) 在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑...
  • 12.远程代码执行和远程命令执行

    千次阅读 2021-10-31 22:06:08
    一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上 一般会给用户提供一个ping操作的web界面,用户从web界面输入...
  • Oracle远程登录命令

    千次阅读 2019-05-22 15:38:03
    转载自这篇文章 ... ... 1.C: > sqlplus "/as sysdba"  ...oracle 连接远程数据库 ...1.用sqlplus远程连接oracle命令 语法: ... 用sqlplus远程连接oracle命令(例:sqlplus risenet/1@//192.168.130.99:1521/risenet)
  • Macaulay2Web-Macaulay2的Web应用程序 Macaulay2Web对于一个Web界面 。 它基于 。 接下来的内容有些过时,在重写过程中考虑到Macaulay2Web与... 我们还发现,不熟悉Unix风格的命令行工具的用户使用Web应用程序比使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,990
精华内容 26,396
关键字:

web端实现远程命令行工具