垃圾回收器
目前为止还没有完美的收集器出现,更加没有万能的收集器,只是针对具体应用最合适的收集器,进行分代收集。
4中主要垃圾收集器:
查看默认垃圾收集器:
java -XX:+PrintCommandLineFlags -version
== Java的提供的垃圾回收器:==
UseSerilGC
UseParallelGC
UseConcMarkSweepGC
UseParNewGC
UseParallelOldGC
UseG1GC
GC约定参数:
DefNew (Default New Generation) 默认新生代收集器
Tenured (Old) 老年代
ParNew (ParallelNewGeneration) 新生代并行回收
PSYoungGen (Parallel Scavenge) 新生代使用PS
ParOldGen (Parallel Old Generation) 老年代使用PS old
Linux性能查看命令
整机:top
uptime:系统性能命令的精简版
CPU:vmstat
vmstat -n 2 3
查看CPU,2秒一次,刷新3次
- procs
- r:运行和等待CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不能超过总核数的2倍,否则代表系统压力过大。
- b:等待资源的进程数,比如正在等待磁盘I/O、网络I/O等。
- cpu
- us:用户进程消耗CPU的时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,则需要优化程序。
- sy:内核进程的消耗CPU时间的百分比
- us+sy:参考值为80%,如果us+sy大于80%,说明可能存在CPU不足。
- id:处于空闲的CPU百分比
- wa:系统等待IO的CPU时间百分比
- st:来自一个虚拟机偷取的CPU时间的百分比
查看所以有CPU核信息:
mpstat -P ALL 2 2秒刷一次
每个进程使用CPU的用量分解信息:
pidstat -u 1 -p 进程编号
内存:free
free 查看内存
free -g 以G为单位
free -m 以M为单位
应用程序可用内存/系统物理内存 > 70%:内存充足
应用程序可用内存/系统物理内存 < 20%:内存不足
查看指定进程消耗的内存:
pidstat -p 进程号 -r 采样间隔秒数
硬盘:df
df
df -h 人性化显示
磁盘IO:iostat
iostat -xdk 2 3
rkB/s 每秒读取数据量kb;
wkB/s 每秒写入数据量kb;
svctm I/O请求的平均服务时间,单位毫秒
查看指定进程磁盘IO:
pidstat -d 采样间隔秒数 -p 进程号
网络IO:ifstat
CPU占比过高的定位分析思路
-
先用top命令找出CPU占比最高的
-
使用ps -ef 或者jps进一步定位,得知是怎样的一个后台程序出问题
-
定位到具体线程或代码
ps -mp 进程编号 -o THREAD,tid,time
-m 显示所有线程
-p pid进程使用cpu的时间
-o 该参数后是用户自定义格式 -
将需要的线程ID转换为16进制格式(英文小写格式)
printf "%x\n" 有问题的线程ID
-
jstack 进程ID | grep tid(16进制英文小写格式) -A60
-A60:前60行
Git
Git常用词:
- watch:会持续收到该项目的动态
- fork:赋值某而过项目到自己的GitHub仓库
- star:点赞
- clone:将项目下载到本地
- follow:关注感兴趣的作者,会收到他们的动态
in关键词限制搜索范围:
公式:xxx关键词 in:name或description或readme
xxx in:name 项目名包含xxx的
xxx in:description 项目描述包含xxx的
xxx in:readme 项目的readme文件中包含xxx的
组合使用:seckill in:name,readme
stars或fork数量关键词去查找:
公式:
xxx关键词 stars 通配符 :> 或者 :>=
区间范围数字 数字1..数字2
查找stars数大于等于5000的springboot项目
springboot stars:>=5000
查找forks数大于500的springcloud项目
springcloud forks:>500
组合使用:
查找fork在100到200之间并且stars数在80到100之间的springboot项目
springboot forks:100..200 stars:80..100
awesome加强搜索:
一般是用来收集学习、工具、书籍类相关的项目
公式:awesome 关键字
高亮显示某一行代码:
公式:
1行 地址后面紧跟#L行号
多行 地址后面紧跟#L数字-L数字2
项目内搜索:
公式:快捷键小写t
搜索区域内活跃用户:
北京地区的java方向的用户
location:beijing language:java