查看虚拟机进程:jps 命令 jps 命令可以列出所有的 Java 进程.如果 jps 不加任何参数,可以列出 Java 程序的进程 ID 以及 Main 函数短名称,如下所示. $ jps 6540 Jps 64447 Main 除此之外,还可以指定下面的参数自定义输出信息: 参数 含义 -q 指定jps只输出进程ID -m 输出传递给Java进程的参数 -l 输出主函数的完整路径 -v 显示传递给Java虚拟机的参数 虚拟机统计信息:jstat 命令 jstat 用于观察 Java 堆信息的…
说到 Java 虚拟机,不得不提的就是 Java 虚拟机的 GC(Garbage Collection)日志.而对于 GC 日志,我们不仅要学会看懂,而且要学会如何设置对应的 GC 日志参数.今天就让我们来学习一下 Java 虚拟机中所有与 GC 日志有关的参数.相信掌握了这些参数之后,对于大家线上打印 GC 日志是有不少帮助的. 为了能够更直观地显示出每个参数的作用,我们将以下面的 Demo 为例子去设置 GC 日志参数. /** * @author 陈树义 * @date 2018.09.2…
我们都知道 JVM 在启动的时候会去加载类信息,那么我们怎么得知他加载了哪些类,又卸载了哪些类呢?我们这一节就来介绍四个 JVM 参数,使用它们我们就可以清晰地知道 JVM 的类加载信息. 为了方便演示,我们使用下面的程序作为本次的演示程序. /** * @author chenshuyi * @date 2018.09.30 */ public class ClassLoadDemo { public static void main(String[] args) { String name…
JVM 中最重要的一部分就是堆空间了,基本上大多数的线上 JVM 问题都是因为堆空间造成的 OutOfMemoryError.因此掌握 JVM 关于堆空间的参数配置对于排查线上问题非常重要. tips:本文所有配置,如无特别说明,均基于JDK1.8. 堆配置 我们使用 -Xms 设置堆的初始空间大小,使用 -Xmx 设置堆的最大空间大小. java -Xms20m -Xmx30m GCDemo 在上面的命令中,我们设置 JVM 的初始堆大小为 20M,最大堆空间为 30M. 年轻代 在 JDK1…
我们经常会听到许多垃圾回收的术语,例如:Minor GC.Major GC.Young GC.Old GC.Full GC.Stop-The-World 等.但这些 GC 术语到底指的是什么,它们之间的区别到底是什么?今天我们就来详细说说. Minor GC 从年轻代空间回收内存被称为 Minor GC,有时候也称之为 Young GC.对于 Minor GC,你需要知道的一些点: 当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了.所以 Eden 区越小…
前面文章中,我们介绍了 Java 虚拟机的内存结构,Java 虚拟机的垃圾回收机制,那么这篇文章我们说说具体执行垃圾回收的垃圾回收器. 总的来说,Java 虚拟机的垃圾回收器可以分为四大类别:串行回收器.并行回收器.CMS 回收器.G1 回收器. 串行回收器 串行回收器是指使用单线程进行垃圾回收的回收器.因为每次回收时只有一个线程,因此串行回收器在并发能力较弱的计算机上,其专注性和独占性的特点往往能让其有更好的性能表现. 串行回收器可以在新生代和老年代使用,根据作用于不同的堆空间,分为新生代串行…
在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存,就不得不谈到 Java 虚拟机的垃圾回收机制.因为内存总是有限的,我们需要一个机制来不断地回收废弃的内存,从而实现内存的循环利用,这样程序才能正常地运转下去. 比起 Java 虚拟机的内存结构有<Java 虚拟机规范>规定,垃圾回收机制并没有具体的规范约束.所以很多时候不同的虚拟机有不同的实现方式…
当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析.运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制.JVM 虚拟机执行 class 字节码的过程可以分为七个阶段:加载.验证.准备.解析.初始化.使用.卸载. 在开始聊之前,先给大家看一道面试题. class Grandpa { static { System.out.println("爷爷在静态代码块"); } } class Father extends Grandpa…
看到这里,我相信大家对于一个 Java 源文件是如何变成字节码文件,以及字节码文件的含义已经非常清楚了.那么接下来就是让 Java 虚拟机运行字节码文件,从而得出我们最终想要的结果了.在这个过程中,Java 虚拟机会加载字节码文件,将其存入 Java 虚拟机的内存空间中,之后进行一系列的初始化动作,最后运行程序得出结果. 那么字节码数据在 Java 虚拟机内存中是如何存放的 ?Java 虚拟机在为类实例或成员变量分配内存是如何分配的 ?要解答上面这些问题,我们首先需要了解一下 Java 虚拟机的…
温馨提示:此篇文章长达两万字,图片50多张,内容非常多,建议收藏后再看. 前面我们说到 Java 虚拟机使用字节码实现了跨平台的愿景,无论什么系统,我们都可以使用 Java 虚拟机解释执行字节码文件.但其实字节码是有一套规范的,而规定字节码格式的就是<Java 虚拟机规范>.<Java 虚拟机规范>规定了 Java 虚拟机结构.Class 类文件结构.字节码指令等内容.其中类文件结构是有必要了解的一个内容. 字节码文件结构是一组以 8 位字节为基础的二进制流,各数据项目严格按照顺序…
在上篇文章我们聊到,无论什么语言写的代码,其到最后都是通过机器码运行的,无一例外.那么对于 Java 语言来说,其从源代码到机器码,这中间到底发生了什么呢?这就是今天我们要聊的. 如下图所示,编译器可以分为:前端编译器.JIT 编译器和AOT编译器.下面我们逐个讲解. 前端编译器:源代码到字节码 之前我们说到:对于 Java 虚拟机来说,其实际输入的是字节码文件,而不是 Java 文件.那么对于 Java 语言而言,其实怎么将 Java 代码转化成字节码文件的呢?我们知道在 JDK 的安装目录里…
我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的,而这个软件包在苹果的 Mac OSX 系统上是无法安装的.类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 Windows 系统上安装. 为什么不同系统上的软件无法安装,这是因为操作系统底层的实现是不一样的.对于 Windows 系统来说,exe 后缀的软件代码最终编译成 Windows 系统能识别的机器码.而 Mac OSX 系统来说,dmg 后缀的软件代码最终编译成 Mac OSX 系统能识别的代码.…
说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待.但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM.Exact VM.BEA JRocketit.IBM J9 等等.今天我们就来简单回顾下 Java 虚拟机的发展历史. 虚拟机始祖:Sun Classic 在 1996 年 1 月 23 日,Sun 发布 JDK 1.0,其中自带的虚拟机就是 Classic VM.但这款虚拟机有个特点,即只能使用纯解释器的方式来执行 Java 代码,…
Java 语言是一门存在了 20 多年的语言,其年纪比我自己还大.虽然存在了这么长时间,但 Java 至今都是最大的工业级语言,许多大型互联网公司均采用 Java 来实现其业务系统.大到国际电商巨头阿里巴巴,小到无名小公司,我们均可看到 Java 的身影. 我是 2010 年开始接触 Java 语言的,在我刚刚接触 Java 的时候,我经常对于 Java 中的一些基本概念弄不清楚.例如:JDK 7 与 Java SE 7 有什么区别?JDK 与 JRE 有什么区别 ?Java SE 与 Java…
阅读原文 查看虚拟机进程:jps 命令 jps 命令可以列出所有的 Java 进程.如果 jps 不加任何参数,可以列出 Java 程序的进程 ID 以及 Main 函数短名称,如下所示. $ jps 6540 Jps 64447 Main 除此之外,还可以指定下面的参数自定义输出信息: 参数 含义 -q 指定jps只输出进程ID -m 输出传递给Java进程的参数 -l 输出主函数的完整路径 -v 显示传递给Java虚拟机的参数 虚拟机统计信息:jstat 命令 jstat 用于观察 Java…
跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看.所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试.但我经过了几年的学习和实战,我发现其实学习虚拟机并不仅仅在于面试,而在于更深入地理解 Java 这门语言,以及为未来排查线上问题打下基础. 先聊聊我的第一个观点:学习 Java 虚拟机能深入地理解 Java 这门语言.对于刚刚工作一两年的朋友来说,各个 API 都没用熟,自然不会去深入研究 Java 中的各种细节.但对于工作了三年以后的朋友来说,很…
定位问题的时候,知识.经验是关键基础,数据是依据,工具是运用知识处理数据的手段. 在实际的故障排查.性能监控中,常常是操作系统的工具和Java虚拟机的工具结合使用. 1.操作系统工具 1.1.top:显示系统整体资源使用情况 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况. 在Linux使用top命令的部分输出如下: top命令的输出可以分为两个部分:前半部分是系统统计信息,后半部分是进程信息. 在统计信息中: 第1行是任务队列信息,从左到右依次表示:系统当…
进程监控 端口   1)netstat -anp | grep xxx   2)lsof  -i:<port> 句柄    lsof  -n | grep xxxx 线程栈   1)gstack 2)用gdb  attach进去 3)java进程用jstack,或btrace 运行时系统调用    strace -fp <pid> -o <output> /var/log/message,查看系统异常信息,如out of memory kill 网络监控 抓包  tcp…
Java三大版本(Write Once:Run Anywhere) JavaSE:标准版 JavaME:嵌入式开发 JavaEE:E企业级开发 JDK.JRE.JVM JDK是开发工具包 JRE是编译器,相当于运行环境 JVM相当虚拟机…
Kafka 是由 LinkedIn 开发的一个分布式的消息系统,使用 Scala 编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如 Cloudera.Apache Storm.Spark 都支持与 Kafka 集成. Kafka 创建背景 Kafka 是一个消息系统,说得简单点就是一个消息队列.但是它不仅仅只是一个消息队列,其在消息队列基础上有了更多的功能,以适应业务系统的要求. Kafka 原本开发自 LinkedIn,用作 LinkedIn 的活动流(Activ…
jps JVM Process Status Tool,显示指定系统内所有的 HotSpot 虚拟机进程.显示信息包括虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID). jps [-q] [-mlvV] [<hostid>] 选项 作用 -q 只输出 LVMID,省略主类的名称 -m 输出虚拟机进程启动时传递给主类 main() 函数的参数 -l 输出主类的名称,如果进程执行的是 jar 包,输出 jar 路径…
参考资料地址: http://www.icoolxue.com/ 1.数据结构中四种逻辑结构. ① 集合 集合中任何两个数据元素之间都没有逻辑关系,组织形式松散. ② 线性结构 线性结构中的 结点按逻辑关系依次排列形成一个“锁链”. ③ 树形结构 树形结构具有分支.层次特性,其形态有点象自然界中的树. ④ 图状结构 图状结构中的结点按逻辑关系互相缠绕,任何两个结点都可以邻接 2.…
Scanner对象 之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入.java.util.Scanner是Java5的新特征.我们可以通过Scanner类来获取用户的输入 基本语法: Scanner scanner = new Scanner(System.in); 通过Scanner类的next()与nextline()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的…
1.ifconfig 网卡数目.ip地址.Mac地址.MTU大小 eth0 Link encap:Ethernet HWaddr 00:0d:3a:50:12:e9 inet addr:10.0.0.4 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::20d:3aff:fe50:12e9/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1…
vmstat 可以用来监控虚拟内存.可对操作系统的虚拟内存.IO.CPU等多个指标的整体情况进行监视. Linux系统的内存分为物理内存和虚拟内存两种.物理内存是真实的,也就是物理内存条上的内存.而虚拟内存则是采用硬盘空间补充物理内存,将暂时不使用的内存页写到硬盘上以腾出更多的物理内存让有需要的进程使用.当这些已被腾出的内存页需要再次使用时才从硬盘(虚拟内存)中读回内存.这一切对于用户来说是透明的.通常对Linux系统来说,虚拟内存就是swap分区. hello@ubuntu:~$ vmstat…
1.常用系统命令Vmstat.sar.iostat.netstat.free.ps.top等 2.常用组合方式• 用vmstat.sar.iostat检测是否是CPU瓶颈• 用free.vmstat检测是否是内存瓶颈• 用iostat检测是否是磁盘I/O瓶颈• 用netstat检测是否是网络带宽瓶颈 一.Vmstat1.vmstat 5 5:每5秒监控一次,总共5次 r:表示运行队列(就是说多少个进程真的分配到CPU),一般运行队列多大,表示CPU很繁忙,导致CPU使用率过高b:表示阻塞的进程s…
如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员. 有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 SUSE Linux 就有一个非常棒而且专业的工具 YaST,KDE 的 KDE System Guard 同样很出色.当然,要使用这些工具,你必须在服务器跟前进行操作,而且这些 GUI 的程序占用了很多系统资源,所以说,尽管 GUI 用来做基本的服务器健康状态监测挺好,但如果你想知道真正发生什么…
转载:https://blog.csdn.net/mig_davidli/article/details/52149993 sar命令可以从文件的读写情况.系统调用的使用情况.磁盘I/O.CPU效率.内存使用状况.进程活动及IPC有关的活动等方面进行报告. 命令格式:sar [options] [-A] [-o file] t [n]t为采样间隔,n为采样次数,默认值是1-o file表示将命令结果以二进制格式存放在文件中,file 是文件名.options 为命令行选项 sar命令常用选项如下…
Linux系统 查看系统版本情况: $uname -a 监控进程的CPU,MEM使用情况: $ps –aux 过滤方式命令:$ ps -aux|awk '{print $3,$4,$11}'|sort -r|head -n 15 其他相关命令方式有:vmstat ,iostat ,free 查看linux系统的CPU和MEM大小: $cat /proc/cpuinfo $cat /proc/meminfo 查看磁盘的分区使用情况: $df –k(M) 相关命令输出参数的详细解释: Sun Sol…
1.显示服务器状态:db.serverStatus()      2.mongodb可以通过profile来监控数据,进行优化. 查看当前是否开启profile功能:db.getProfilingLevel()  返回level等级,值为0|1|2,分别代表意思:0代表关闭,1代表记录慢命令,2代表全部 开启profile功能为:db.setProfilingLevel(level,slowms); #level等级.level为1时,慢命令默认值为slowms(单位ms)(即执行时间大于slo…