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

大连网站建设意动科技图片编辑在线使用

大连网站建设意动科技,图片编辑在线使用,wordpress多说读者墙,安装wordpress只有文字jconsole Java监视与管理控制台 1、jconsole介绍 jconsole (java monitoring and management console)是一款基于JMX (Java Management Extensions) 的可视化监视和管理工具。 2、启动jconsole 1、在linux和windwos下通过jconsole启动即可。 2、然后会自动搜索本机运行的…

jconsole Java监视与管理控制台

1、jconsole介绍

jconsole (java monitoring and management console)是一款基于JMX (Java Management Extensions)

的可视化监视和管理工具。

2、启动jconsole

1、在linuxwindwos下通过jconsole启动即可。

2、然后会自动搜索本机运行的所有虚拟机进程。

3、选择其中一个进程可开始进行监控。

在这里插入图片描述

在这里插入图片描述

3、jconsole基本介绍

jconsole 基本包括以下基本功能:概述内存线程VM概要MBean

运行下面的程序,然后使用jconsole进行监控,注意设置虚拟机参数。

package com.example.controller;import java.util.ArrayList;
import java.util.List;public class Demo1 {static class OOMObject {public byte[] placeholder = new byte[64 * 1024];}public static void fillHeap(int num) throws InterruptedException {// 先运行程序,在执行监控Thread.sleep(20000);List<OOMObject> list = new ArrayList<OOMObject>();for (int i = 0; i < num; i++) {// 稍作延时,令监视曲线的变化更加明显Thread.sleep(50);list.add(new OOMObject());}System.gc();}public static void main(String[] args) throws Exception {fillHeap(1000);while (true) {//让其一直运行着}}
}

配置启动参数:-Xms100M -XX:+UseSerialGC -XX:+PrintGCDetails

在这里插入图片描述

在这里插入图片描述

可以切换顶部的选项卡查看各种指标信息:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

内存监控

内存页签相当于可视化的jstat 命令,用于监视受收集器管理的虚拟机内存的变换趋势。

在这里插入图片描述

代码运行,控制台也会输出gc日志:

[GC (Allocation Failure) [DefNew: 27305K->3392K(30720K), 0.0087378 secs] 27305K->14929K(99008K), 0.0088041 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
[GC (Allocation Failure) [DefNew: 30720K->3369K(30720K), 0.0125603 secs] 42257K->38591K(99008K), 0.0125827 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
[GC (Allocation Failure) [DefNew: 30697K->3367K(30720K), 0.0206170 secs] 65919K->63766K(99008K), 0.0206669 secs] [Times: user=0.00 sys=0.02, real=0.02 secs] 
[Full GC (System.gc()) [Tenured: 60398K->66528K(68288K), 0.0339940 secs] 66709K->66528K(99008K), [Metaspace: 9255K->9255K(1058816K)], 0.0343586 secs] [Times: user=0.05 sys=0.00, real=0.04 secs] 

4、线程监控

如果上面的内存页签相当于可视化的jstat命令的话,线程页签的功能相当于可视化的jstack命令,遇到线程停顿

时可以使用这个页签进行监控分析。线程长时间停顿的主要原因主要有:等待外部资源(数据库连接、网络资源、

设备资源等)、死循环、锁等待(活锁和死锁)

下面三个方法分别等待控制台输入、死循环演示、线程锁等待演示。

**第一步:**运行下面的代码。

package com.example.controller;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class Demo2 {public static void main(String[] args) throws IOException {waitRerouceConnection();createBusyThread();createLockThread(new Object());}/*** 等待控制台输入** @throws IOException*/public static void waitRerouceConnection() throws IOException {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));try {br.readLine();} catch (IOException e) {e.printStackTrace();}}}, "waitRerouceConnection");thread.start();}/*** 线程死循环演示*/public static void createBusyThread() {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {while (true) {;}}}, "testBusyThread");thread.start();}/*** 线程锁等待演示*/public static void createLockThread(final Object lock) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock) {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}}}, "testLockThread");thread.start();}
}

**第二步:**打开jconsole中查看上面程序运行情况,可以查看到3个目标线程。

在这里插入图片描述

在这里插入图片描述

**第三步:**查看目标线程信息

waitRerouceConnection线程处于读取数据状态,如下图:

在这里插入图片描述

testBusyThread线程位于代码45行,处于运行状态,如下图:

在这里插入图片描述

testLockThread处于活锁等待状态,如下图:

在这里插入图片描述

只要lock对象的notify()或notifyAll()方法被调用,这个线程便可能激活以继续执行。

通过 线程 这个窗口可以很方便查询虚拟机中的线程堆栈信息,对发现系统中的一些问题非常有帮助。

5、线程死锁演示

**第一步:**运行下面代码:

package com.example.controller;public class Demo3 {public static void main(String[] args) {User u1 = new User("u1");User u2 = new User("u2");Thread thread1 = new Thread(new SynAddRunalbe(u1, u2, 1, 2, true));thread1.setName("thread1");thread1.start();Thread thread2 = new Thread(new SynAddRunalbe(u1, u2, 2, 1, false));thread2.setName("thread2");thread2.start();}/*** 线程死锁等待演示*/public static class SynAddRunalbe implements Runnable {User u1, u2;int a, b;boolean flag;public SynAddRunalbe(User u1, User u2, int a, int b, boolean flag) {this.u1 = u1;this.u2 = u2;this.a = a;this.b = b;this.flag = flag;}@Overridepublic void run() {try {if (flag) {synchronized (u1) {Thread.sleep(100);synchronized (u2) {System.out.println(a + b);}}} else {synchronized (u2) {Thread.sleep(100);synchronized (u1) {System.out.println(a + b);}}}} catch (InterruptedException e) {e.printStackTrace();}}}public static class User {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public User(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +'}';}}
}

thread1持有u1的锁,thread2持有u2的锁,thread1等待获取u2的锁,thread2等待获取u1的锁,相互需要获取

的锁都被对方持有者,造成了死锁。程序中出现了死锁的情况,我们是比较难以发现的。需要依靠工具解决。刚好

jconsole就是这个美妙的工具。

**第二步:**在jconsole中打开上面程序的监控信息:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

从上面可以看出代码39行和46行处导致了死锁。

在这里插入图片描述

关于程序死锁的,我们还可以使用命令行工具jstack来查看java线程堆栈信息,也可以发现死锁。

在这里插入图片描述

在这里插入图片描述

http://www.yayakq.cn/news/978891/

相关文章:

  • 网站有哪些类型wordpress php配置文件
  • 松山湖网站建设公司宁波企业免费建站
  • 实训课建设网站步骤html网页特效
  • 凡科网做网站怎样游昕手游代理平台
  • 网站搭建哪里找有名气wordpress社区程序
  • 网站建设佰金手指科杰二九会计培训机构排名
  • 培训网站建设学校建筑模板厂家大全
  • 广州网站制作哪家公司好刚刚沈阳发布重要通知
  • 网站建设 外包 厦门免费的html模版下载
  • 微网站开发流程图《企业宣传片制作》
  • 全网vip视频网站怎么做wordpress覆盖密码重置
  • 苏州工业园区两学一做教育网站wordpress最新列表页
  • 网站建设先进个人代表发言东营会计信息网官网首页
  • 个人秀网站网站建设人员要求
  • 各大网站官网的导航栏怎么做广东网站建设设计服务
  • 创建一个网站英语户外俱乐部网站模板
  • 有了域名怎样做网站太原在建
  • 相亲网站排名前十名wordpress 跟随插件
  • 网站空间集装箱手机图片网站 模版
  • 山西运城市建设局网站第三方网站开发的商家
  • 低价网站建设教程动易sitefactorycms 网站配置保存不了问题
  • 用源码建设网站定制网站与模板网站
  • 西安机场商务宾馆百度做网站高端品销售网站
  • 一级a做爰片视频网站微信公众号推广目的
  • 动力无限做网站怎么样公众号营销
  • 网站建设东莞老铁博客丹东做网站公司
  • 开设网站维护公司广东省城乡建设厅投诉网站
  • 电子商务网站开发的背景苏州宿迁工业园区
  • 知乎问答网站开发教程网站建设技能考
  • 做旅游网站运营网站的头尾和导航的公用文件