-
java 线程监控_java中的线程是什么?怎么理解线程?多线程又是什么?怎么去监控线程?...
2021-02-28 16:37:56谢邀,如果理解操作系统线程,就好理解Java线程了。如果理解操作系统进程,操作系统线程也比较好理解。操作系统进程不陌生吧?你的迅雷在下载《三国演义》,暴风影音在播放《水浒传》,这就是两个进程,可以同时运行...谢邀,如果理解操作系统线程,就好理解Java线程了。如果理解操作系统进程,操作系统线程也比较好理解。操作系统进程不陌生吧?你的迅雷在下载《三国演义》,暴风影音在播放《水浒传》,这就是两个进程,可以同时运行的。
进程们所争夺的资源,是CPU时间,CPU执行任务是线性的,但CPU数量有限(早期都是单CPU,现在多了点),而用户想同时使用的功能数量无厌,怎样用有限的CPU,支撑许多功能的同时运行?答案是,做不到。但可以让CPU这20毫秒运行任务A,下20毫秒运行任务B,再下20毫秒又运行任务A……这样频繁的切换,能让用户误以为A和B在同时运行,这就是所谓的伪并发。
为实现伪并发,就需要多进程,每个进程占用一些内存空间,该空间装了进程需要使用的程序代码和状态数据,每个进程还占用一些CPU时间,用来让CPU执行它的代码。状态得以保存,代码得以执行,我们就可以通过编程来实现各种目的了。
Java中的线程类似,在同一时刻,一个线程只能执行一件任务,如果你希望同一时刻有多个任务在执行,就需要开多个线程。试着写一个Socket服务器就知道了,不用多线程,没法同时处理多个客户端的请求呀。
但用了多线程,犯错的可能性是很大的,尤其是犯错后很难重现错误,导致排查和修改很艰难,这时如果能监控运行中的线程的状态就好了,就像我们调试程序时喜欢打上断点监控运行中的程序状态一样,有了这个信息反馈,更容易知道到底发生了什么,知道程序哪里写错了。
-
Java 多线程之线程监控
2016-07-22 12:09:14在这里我们使用一个监控线程的概念。我们可以定义一个线程继承自Thread类,在其中定义一个Map集合,用于存放我们需要管理的线程;当我们需要对某个线程进行操作时,我们就可以根据他的key值获取到;在程序开发中我们经常会使用到很多线程去做不同的业务,我们怎么能方便的管理这些线程呢?是否我们希望我们创建的线程能够一直运行下去,知道程序退出?在这里我们使用一个监控线程的概念。
我们可以定义一个线程继承自Thread类,在其中定义一个Map集合,用于存放我们需要管理的线程;当我们需要对某个线程进行操作时,我们就可以根据他的key值获取到;
private HashMap<String, Thread> threads2Watch = new HashMap<String, Thread>();
在run方法中,我们写一个循环,让此线程一直运行下去,并利用sleep方法,让其停顿一段时间;
while (true) { try { sleep(1 * 60 * 1000); } catch (InterruptedException e) { DebugLog.logger.error("Exception!!", e); continue; } }
注意这里的catch中加入了一个continue;即使此次sleep发生了异常,while循环仍然可以运行下去;不会对整个线程造成影响;
在while()循环中,我们就可以写自己管理线程的业务方法了,比如遍历整个map集合,获取当前线程的转态,如果线程已经结束,我们就从新开启一个这样的线程,并把它加入map集合中;
通过以上的这种做法,我们可以让我们自己程序中想要一直运行的线程一直运行下去,这种线程尤其适合在频繁监听某一网络端口,网络状态,某些值的变化是很重要的;
通过这种思想,我们可以根据自己需要扩展自己的功能;
-
linux怎么定位java_Linux系统监控命令及如何定位到Java线程
2021-03-13 15:42:43常用的linux系统监控命令整理 找到最耗CPU的java线程ps命令 命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid 结果展示: 这个命令的作用,主要是可以获取到对应一个进程下的线程的 ... 常用的linux系统监控命令...>>PID、TID的区分
uid是user id,即用户id,root用户的uid是0,0为最高权限,
gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID、GID:
~$ id bingyue
uid=1000(bingyue) gid=1000(bingyue) groups=1000(bingyue)
~$ id root
uid=0(root) gid=0(root) groups=0(root)
pid是process id,即进程id,可以通过pid找到这个进程的uid,
tid是thead id,可以理解为线程的id。
>>常用的系统监控命令
top查看活动进程信息
top 命令显示当前的活动进程,默认它是按占用CPU 的多少进行排序,每5秒钟刷新一次列表,
你也可以选择不同的排序方式,例如 m 是按内存占用方式进行排序的快捷键。
iostat命令查看磁盘读取情况
iostat 命令用来显示存储子系统的详细信息,通常用它来监控磁盘 I/O 的情况。
要特别注意 iostat 统计结果中的 %iowait 值,太大了表明你的系统存储子系统性能低下。
使用meminfo查看内存信息
meminfo 包含了内存的详细信息,可以使用 cat 和 grep 命令来显示 meminfo 信息:
cat /proc/meminfo
使用free命令动态查看内存信息
可以使用 free 命令来显示动态的内存使用信息,free 查看大概的内存信息,而 meminfo 提供的信息更加详细。
lsof命令查看打开文件和端口等的列表
lsof 命令对于很多 Linux/Unix 系统都可以使用,主要以列表的形式显示打开的文件和进程。
打开的文件主要包括磁盘文件、网络套接字、管道、设备和进程。
使用这个命令的主要原因是一个一个盘不能卸载并且显示文件正在使用或者打开的错误信息。这个命令很容易看出哪些文件正在使用。
使用mpstat查看cpu信息
mpstat mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。
默认可能没有安装,需要安装后使用。
在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
使用pmap查看某进程的内存使用情况
pmap 命令用来报告每个进程占用内存的详细情况,可用来看是否有进程超支了,该命令需要进程 id 作为参数。
pmap pid
使用ps 和 pstree查看进程列表
ps 和 pstree 命令都可以用来列表展示正在运行的所有进程。ps 告诉你每个进程占用的内存和 CPU 处理时间,而 pstree 显示的信息没那么详细,但它以树形结构显示进程之间的依赖关系,包括子进程信息。一旦发现某个进程有问题,你可以使用 kill 来杀掉它。
netstat网络信息
Netstat 和 ps 命令类似,显示了大量跟网络相关的信息,例如 socket 的使用、路由、接口、协议、网络等等。
strace
strace 可以记录进程进行系统调用的详情,因此它也是一个非常好的诊断工具,例如你可以使用它来找出某个程序正在打开某个配置文件。
Strace 在跟踪某个进程时会让该进程的性能变得非常差,因此请谨慎使用。
vmstat
你可以使用 vmstat 来监控虚拟内存,一般 Linux 上的开发者喜欢使用虚拟内存来获得最佳的存储性能。该命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。
uptime
uptime 命令告诉你这台服务器从开机启动到现在已经运行了多长时间了。同时也包含了从启动到现在服务器的平均负载情况
>>常用的监控工具
htop — 进程监控
htop 是一个更加先进的交互式的实时监控工具。htop 与 top 命令非常相似,但是他有一些非常丰富的功能,如用户友好界面管理进程、快捷键、横向和纵向进程等更多的。htop 是一个第三方工具并不包括在 Linux 系统中,你需要使用包管理工具进行安装。
iotop — 监控 Linux 磁盘 I/O
iotop 也是和 top 和 htop 命令相似,但是它会有一个报告功能去监控和显示实时的磁盘 I/O 输入和输出和程序进程。这个工具对于查找精确的高的磁盘读/写过程是非常有用的。
nmon即奈吉尔性能监视器
Nmon是 Nigel's Monitor 的缩写,是一个使用很普遍的开源工具,用来监视 Linux 系统的所有资源包括:CPU、内存、磁盘使用率、网络上的进程、NFS、内核等等,并且提供了一个图形化的工具。
tcpdump — 网络数据包分析器
Tcpdump 是一个简单、可靠的网络监控工具,用来做基本的协议分析,看看那些进程在使用网络以及如何使用网络。
如果需要获取详细的信息,可以使用 Wireshark 。
>>Linux监控常用的操作
netstat -natp : 查看对应的网络链接
lsof -p pid : 查找对应pid的文件句柄
lsof -i : 80 : 查找对应端口被哪个进程占用
lsof /tmp/1.txt :查找对应文件被哪个进程占用
查看所有存在的线程:
ps xH
手册中说:H Show threads as if they were processes
查看一个进程起的线程数:
ps -mp
手册中说:m Show threads after processes
>>找到最耗CPU的Java线程
首先使用top等命令找到jvm进程的pid,
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3853 weblogic 18 0 9268m 4.1g 10m S 34.4 6.5 1301:04 java
当前jvm进程的pid是3853,通过jstack命令dump出当前的jvm进程的堆栈信息:
jstack 3853 >> /tmp/jstack0330.txt
然后使用下面的命令:
ps -mp pid -o THREAD,tid,time
或者
ps -Lfp pid
这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息:
$ ps -mp 3853 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
weblogic 29.3 - - - - - - 21:40:17
weblogic 10.7 24 - 184467 - - 13979 07:39:06
通过 printf "%x\n" 13979 可以将线程id转化成16进制表示,
继续通过grep命令即可以查到对应16进制的线程id信息:
grep 369b /tmp/jstack0330.txt
堆栈信息中的nid对应的linux操作系统下的tid,就是线程id对应的16进制数字,
tid则是jvm的jmm内存规范中的唯一地址定位。
使用grep -A ,可以显示匹配行和之后的几行,
继续查看线程所在堆栈信息中前后的部分:
grep 369b /tmp/jstack0330.txt -A 10
就可以定位到相关的代码位置。
Linux系统监控命令及定位Java线程
1.PID.TID的区分 uid是user id,即用户id,root用户的uid是0,0为最高权限,gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID.GID:~ ...
总结:常用的Linux系统监控命令
记录一下自己常用的linux系统命令,方便以后查阅,发觉记忆越来越不行了 找到最耗CPU的java线程 ps命令 命令: ps -mp pid -o THREAD,tid,time 或者 ps -Lf ...
常用的linux系统监控命令整理
找到最耗CPU的java线程ps命令 命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid 结果展示: 这个命令的作用,主要是可以获取到对应一个进程下的线程的 ...
常用的linux系统监控命令
记录一下自己常用的linux系统命令,方便以后查阅,发觉记忆越来越不行了 找到最耗CPU的java线程 ps命令 命令:ps -mp pid -o THREAD,tid,time 或者 ps - ...
Linux记录-linux系统监控命令汇总
命令 功能应用 用法举例 free 查看内存使用情况,包括物理内存和虚拟内存 free -h或free -m vmstat 对系统的整体情况进行统计,包括内核进程.虚拟内存.磁盘.陷阱 ...
总结:常用的Linux系统监控命令(2)
判断I/O瓶颈 mpstat命令 命令:mpstat -P ALL 1 1000 结果显示: 注意一下这里面的%iowait列,CPU等待I/O操作所花费的时间.这个值持续很高通常可能是I/O瓶颈所导 ...
性能测试三十三:监控之Linux系统监控命令大全
1.top命令top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top - 01:06:48 up 1: ...
Linux系统监控命令之iotop
iotop命令 iotop命令是一个用来监视磁盘I/O使用状况的top类工具.iotop具有与top相似的UI,其中包括PID.用户.I/O.进程等相关信息.Linux下的IO统计工具如iostat, ...
Linux系统监控命令详解
1. top命令 top命令经常用来监控Linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解. 输 ...
随机推荐
MongoDB学习:(一)MongoDB安装
MongoDB学习:(一)MongoDB安装 MongoDB介绍: 直接百科了: MongoDB安装: 1:下载安装: MongoDB安装:https://www.mongodb.com/do ...
Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互
框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java model文件夹下的 Global ...
一、HTML和CSS基础--HTML+CSS基础课程--第2部分
第三章 与浏览器交互,表单标签 使用表单标签,与用户交互 网站怎样与用户进行交互?答案是使用HTML表单(form).表单是可以把浏览者输入的数据传送到服务器端,这样服务器端程序就可以处理表单传过来的 ...
js判断ie版本号
jQuery 2.0 去除了对浏览器版本号的判断(它推荐特性检测),这里是一个老外写的原生判断方法,这段代码着实巧妙!既简介.有向后兼容!一般做法都是:正则搜索 USER_AGENT :但因为历史原 ...
windows下使用VirtualEnv
在开发Python应用程序的时候,有时会开发多个应用程序,那这些应用程序都会共用一个Python.如果应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办?这种情况下,每个应用可能需要各 ...
MVC-简单验证码制作
1.制作验证码: using System; using System.Collections.Generic; using System.Drawing; using System.Drawing. ...
向架构师进军---&;gt;怎样编写软件架构文档
假设你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",增加这个PM.架构师的大家庭 问:为什么要编写软件架构文档,它的优点是什么? 答: 有文档的架构有助于不同利益相关 ...
Ubuntu配置Samba
一.安装Ubuntu samba服务器 $ sudo apt-get install samba $ sudo apt-get install smbclient # Linux客户端测试用 二.创建 ...
Java生产1-100的随机数
直接调用Math里面的random即可,简单方便int i = (int)(Math.random()*100+1);
重新编译安装swoole支持OpenSSL
1.下载:wget http://pecl.php.net/get/swoole-1.9.22.tgz 2.解压:tar zxvf swoole-1.9.22.tgz 3.扩展模块:cd swoole ...
-
怎么查看java进程?怎么检测线程死锁?线程状态
2020-09-16 02:35:04 -
Java监控新文件_Java 新IO怎么监控文件变化?
2021-03-16 14:24:18在以前的Java版本中,如果程序需要监控文件的变化,则可以考虑启动一条后台线程,这条后台线程每隔一段时间去“遍历”一次指定目录的文件,如果发现此次遍历结果与上次遍历结果不同,则认为文件发生了变化。... -
java 多线程内存溢出_线程导致内存溢出怎么处理
2021-02-12 22:35:26所以Server容器启动的时候我们经常关心和设置JVM的几个参数如下:-Xms:java Heap初始大小, 默认是物理内存的1/64。-Xmx:java Heap最大值,不可超过物理内存...-Xss:每个线程的Stack大小,而最佳值应该是128K,默... -
集群运行监控java怎么写_集群监控系统的设计方案
2021-03-15 18:52:20最近接到的需求便是开发一个监控系统,监控所有子应用的抛出的异常信息,以及各种定时线程的执行情况等。一些原则因为项目已经比较庞大了,所以这套监控系统对原有的各应用不能有太大的侵入性,代码的改动量不能太大... -
java socket服务器monitor_通过线程监控socket服务器是否done机
2021-03-16 12:49:19这次我们就来通过一个线程去监控socket服务器,如果done机重新将其启动。下面是监控项目和socket服务器项目的目录结构:因为线程是每两秒发送一次请求检测服务器是否done机,类似心跳,所以包名起作heart。来看... -
监控线程如何重启?
2010-06-10 09:54:24我打算做一个机制来监控这个监听线程是否已经死掉,我想问问各位老师这个机制该怎么去实现,如何实现重启这个线程?或者说我这种应用场景有没有一个简单一点的开源框架满足我的要求 [code="java"] public class ... -
Java多线程-Thread&ThreadPool
2020-09-13 09:37:342. java怎么启动一个线程去异步执行任务 extends Thread类 implements Runnable接口 implements Callable接口(带返回值) 3. java线程生命周期,结合Thread线程的各个方法 4.java线程池概念 5.java线程池怎么... -
JVM监控工具,用来怎么提高JAVA的效率
2011-03-02 19:42:46JVM监控工具,用来怎么提高JAVA的效率 可以展示线程数,看DUMP日志,优化JAVA效率,查询程序的瓶颈 -
tomcat线程被打满怎么排查_使用 zabbix 监控 tomcat(包含jvm监控)
2020-11-21 12:46:591.前言:我们的监控系统是zabbix,最近刚...网友写的zabbix监控java文章,99%就只有环境的搭建,没有zabbix item键值,所以环境监控上了,item键值不知道怎么写。本文监控jvm内容如下:内存使用状态:堆内存(Heap m... -
JAVA中监控一个方法的执行时间,超时了做处理
2020-11-13 16:08:09超时10分钟需要预警发送邮件提醒,刚开始考虑是做sql监控,但这个超时了还需要继续执行,不能停下来,而且做sql监控我只能知道这个sql执行了多久,这个是在执行完毕以后才可以知道总时长的,那怎么去知道这个sql执行... -
java如何监控一个方法的运行时间 [问题点数
2014-05-16 14:39:24在方法前定义 long time = System.currentTimeMillis(); 方法执行中... System.out.println(System.currentTimeMillis() ...开启线程调用你的这个方法,然后需要怎么控制都ok。 这样也不用修改你原来的 -
jstack 线程状态分析_面试官:说说你是怎么用JDK监控和故障处理工具的吧?例如jstack...
2020-12-25 20:41:10当JVM发生故障的时候,能应用JDK命令行工具对JVM进行监控和故障诊断是Java开发人员必备的技能之一。本篇文章将为大家带来JVM进行监控和故障诊断常用的命令行工具,如下图:其中jps、jstat、jinfo、jmap、jhat、... -
java如何停止当前正在运行的线程,新手求解答
2013-09-10 02:08:35最近想做一个无线数据监控服务端,用java做的,面板Jframe设置了一个Jpanel,我称这个为Jpanel 1 ,在Jpanel 1中我定义了一个多选JCheckbox,有四种监控方式可选:Bluetooth,Wifi,GPRS,Zigbee。还定义了一个... -
java的jmc怎么用_Java性能调优:利用JMC进行性能分析
2021-02-28 06:04:59JMC, 即Java任务控制(Java Mission Control)是从Java7(7u40)和Java8的商业版本包括一项新的监控和控制特性。JMC程序(JDK_HOME\bin目录下)会启动一个窗口程序,然后让我们选择对那进程进行监控,JMC打开性能日志后,... -
虚拟机性能监控与故障处理工具-JDK的命令行工具-jstack:Java堆栈跟踪工具
2020-05-10 21:08:15虚拟机性能监控与故障处理工具-JDK的命令行工具-jstack:Java堆栈跟踪工具 文章目录虚拟机性能监控与故障处理工具-JDK的命令行工具-jstack:Java堆栈跟踪工具一、理论知识(一)jstack是什么?(二)jstack有什么... -
linux中怎么根据java内存地址映射资源
2019-12-25 16:27:28写在前面,上周五布置渠道服务器,起初四个区服,周六一天都没有意外。周日新增五个区服,从此开始了一场噩梦,区服频繁崩溃。...上线排查问题,报错日志...考虑到线上已经运营,只能先扔一个监控线程并且自起的shell脚... -
java死锁怎么用jvm调试_性能测试之JVM的故障排查-死锁
2021-03-15 12:16:06死锁原因Java发生死锁的根本原因是:在申请...监控死锁VisualVM监控工具有明显线程死锁提醒,也可监控到发生死锁的线程、类、代码行数、数据类型。分析死锁VisualVM生成threaddump,查找死锁代码块内存地址VisualVM生... -
java线程池shutdownnow后怎么再启动_深入浅出谈Java线程池原理及分析
2020-12-02 10:28:46提高线程的可管理性:线程池可对线程统一分配、调优和监控。原理线程池的原理非常简单,这里用处理流程来概括:线程池判断核心池里的线程是否都在执行任务,如果不是,创建一个新的线程来执行... -
怎么一键执行java程序_如何快速、低成本、低扰动地运行一段Java代码
2021-03-12 20:04:34JVM是个运行服务端应用的好VM,但如果你只是想频繁地运行一段Java写的脚本,或者在跑一些辅助性的Java程序比如监控,比如日志收集,这时候的诉求就和平日里的应用不一样了:1.启动快速,动静小。2.低成本,节约CPU、... -
tomcat线程被打满怎么排查_线上故障快速排查 - RedBackIce
2020-11-18 16:01:48线上问题定位思维导图一 服务器层面 磁盘.1 问题现象当磁盘容量不足的时候,应用时常会抛出如下的异常信息:java.io.IOException: 磁盘空间不足或是类似如下告警信息:.2 排查思路.2.1 利用 df 查询磁盘状态利用以..... -
Java内存溢出怎么调优_[JVM]生产环境下jvm调优概述
2021-03-22 16:35:35JVM相关的典型面试问题:Java生产环境下性能监控与调优详解生产环境发生了内存溢出如何处理?生产环境应该给服务器分配多少内存合适?如何对垃圾收集器的性能进行调优?4.生产环境CPU负载飙高该如何处理?5.生产环境... -
多线程与回调
2019-07-17 08:07:03工作了一年了,一直没怎么多用线程一块,好薄弱,,今天看了看。自己写了个小例子。免的以后忘了。做的主要是线程监控返回值。即不用轮训,和设置变量。让线程通知主类(我做完活东西给你了。) 直接上代码吧。 ... -
记一次狂怼多线程的面经
2018-11-30 14:33:18有什么方法可以监控线程的状态 synchronized 的作用 synchronized 底层是怎么实现的 synchronized 有哪几个使用方式 修饰方法和修饰代码块有什么不同 synchronized 为什么要添加对象锁,即 synchronized () 中,为... -
监控网络变化的广播接收者 重复调用 怎么解决
2013-07-04 15:32:24当没有信号时 会掉线, 我想实现恢复网络连接...造成两次启动联网线程。 有什么解决办法? [code="java"]IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNE... -
Java并发和多线程基础面试题大集合 计网 TCP/UDP 部分高频面试题大集合 面试常问的20个Linux命令 Spring 经典面试题大集合 Spring Boot基础面试题大集合 Spring Cloud基础面试题大集合 C语言/C++基础面试知识大集合 ...
-
多线程基础与回调
2012-03-03 20:59:00工作了一年了,一直没怎么多用线程一块,好薄弱,,今天看了看。自己写了个小例子。免的以后忘了。做的主要是线程监控返回值。即不用轮训,和设置变量。让线程通知主类(我做完活东西给你了。) 直接上代码吧。 ...