最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。
iostat结果面板 avg-cpu 描述的是系统cpu使用情况:
-
%user:CPU处在用户模式下的时间百分比。
-
%nice:CPU处在带NICE值的用户模式下的时间百分比。
-
%system:CPU处在系统模式下的时间百分比。
-
%iowait:CPU等待输入输出完成时间的百分比。
-
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
-
%idle:CPU空闲时间百分比。
在web程序中,可能运行需要网络,可以使用netstat命令监控网络流量。
netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 : LISTEN
udp 0 0 *:bootpc :
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0
unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket
…
以上命令表示列出所有端口信息。
=============================================================================
除了我们比较熟悉的java.exe、javac.exe这两个命令行工具,在jdk的bin目录下,还有一些其它的工具。。除了编译和运行Java程序外,打包、部署、签名、调试、监控、运维等各种场景都可能会用到它们。
jps类似Linux下的ps,它会列出Java程序的进程。
jps命令格式:
jps [ options ] [ hostid ]
jps命令示例:
jps的常用选项见表:
| 选项列表 | 描述 |
| — | — |
| -q | 只输出进程 ID,忽略主类信息 |
| -l | 输出主类全名,或者执行 JAR 包则输出路径 |
| -m | 输出虚拟机进程启动时传递给主类 main()函数的参数 |
| -v | 输出虚拟机进程启动时的 JVM 参数 |
jsta是一个强大的工具。它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据。
jstat命令格式为:
jstat [ option vmid [interval[s|ms] [count]] ]
选项option代表用户希望查询的虚拟机信息,主要分为三类:类加载、垃圾收集、运行期编译状况。
如下,输出Java进程5728的ClassLoader相关信息,每秒统计一次信息,一共输出两次。
下例展示了与GC相关的堆信息的输出:
jstat工具主要选项:
| 选项列表 | 描述 |
| — | — |
| -class | 监视类加载、卸载数量、总空间以及类装载所耗费时长 |
| -gc | 监视 Java 堆情况,包括 Eden 区、2 个 Survivor 区、老年代、永久代或者 jdk1.8 元空间等,容量、已用空间、垃圾收集时间合计等信息 |
| -gccapacity | 监视内容与-gc 基本一致,但输出主要关注 Java 堆各个区域使用到的最大、最小空间 |
| -gcutil | 监视内容与-gc 基本相同,但输出主要关注已使用空间占总空间的百分比 |
| -gccause | 与 -gcutil 功能一样,但是会额外输出导致上一次垃圾收集产生的原因 |
| -gcnew | 监视新生代垃圾收集情况 |
| -gcnewcapacity | 监视内容与 -gcnew 基本相同,输出主要关注使用到的最大、最小空间 |
| -gcold | 监视老年代垃圾收集情况 |
| -gcoldcapacity | 监视内容与 -gcold 基本相同,输出主要关注使用到的最大、最小空间 |
| -compiler | 输出即时编译器编译过的方法、耗时等信息 |
| -printcompilation | 输出已经被即时编译的方法 |
jinfo的作用是实时查看和调整虚拟机各项参数。
jinfo命令格式:
jinfo [ option ] pid
下例显示了新生爱对象晋升老年代的最大年龄。在应用程序启动时,没有指定,但通过jinfo,查看该参数的当前数值。
查看是否打印GC详细信息:
jmap命令用于生成堆转储快照(一般称为heapdump或dump文件)
jmap的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。
jmap命令格式:
jmap [ option ] vmid
如下,使用jmap生成PID为5728的Java程序的对象统计信息, 并输出到dump.txt中。
dump.txt的结构如下:
jmap更重要的功能是得到Java程序的当前堆快照:
如图,将应用程序的堆快照输出到D盘的heap.hprof文件中,之后,可以通过多种工具分析该堆文件。
jmap工具主要选项:
| 选项 | 描述 |
| — | — |
| -dump | 生成 Java 堆转储快照。 |
| -finalizerinfo | 显示在 F-Queue 中等待 Finalizer 线程执行 finalize 方法的对象。Linux平台 |
| -heap | 显示 Java 堆详细信息,比如:用了哪种回收器、参数配置、分代情况。Linux 平台 |
| -histo | 显示堆中对象统计信息,包括类、实例数量、合计容量 |
| -permstat | 显示永久代内存状态,jdk1.7,永久代 |
| -F | 当虚拟机进程对 -dump 选项没有响应式,可以强制生成快照。Linux平台 |
JDK提供jhat命令与jmap搭配使用,来分析jmap生成的堆转储快照。 jhat内置了一个微型的HTTP/Web服务器,生成堆转储快照的分析结果后,可以在浏览器中查看。
以前面生成的heap.hprof为例:
屏幕显示“Server is ready.”的提示后,用户在浏览器中输入http://localhost:7000/可以看到分析结果
jstack命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者 javacore文件)。
jstack命令格式:
jstack [ option ] vmid
如下,使用stack查看线程堆栈的部分结果:
jstack工具主要选项:
| 选项 | 描述 |
| — | — |
| -F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
| -l | 除了堆栈外,显示关于锁的附加信息 |
| -m | 如果调用的是本地方法的话,可以显示 c/c++的堆栈 |
最后
关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。当然,这些内容我也全部整理在一份pdf文档内,分成了以下几大专题:
- Java基础部分
- 算法与编程
- 数据库部分
- 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)
这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。
作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。
图片转存中…(img-uulPt1CJ-1715330897954)]
这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。
作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。