1、 基于JDK命令行工具的监控
1.1、JVM的参数类型
-
标准参数
- -help
- -server -client
- -version -showversion
- -cp -classpath
-
x参数
- 非标准化参数
- -Xit: 解释执行
- Xcomp: 第一次使用就编译成本地代码
- -Xmixed: 混合模式,JVM自己来决定是否编译成本地代码
-
XX参数
-
非标准化参数
-
相对不稳定
-
主要用于JVM 调优 和 Debug
XX参数分类
-
Boolean 类型
- 格式:-XX: [+-] 表示启用或者禁用name属性
- 比如: -XX: +UseConcMarkSweepGc
- -XX:+UseG1Gc
-
非Boolean 类型
-
格式: -xx: = 表示name属性的值是value
-
比如: -XX:MaxGcPauseMillis = 500
XX: GCTimeRatio = 19
-
-Xmx -Xms
-
不是X参数,而是XX参数
-
-Xms 等价于 -XX:lnitialHeapSize
-
-Xmx 等价于 -XX:MaxHeapSize
-
1.2、查看JVM运行时参数
- -XX: + PrintFlagslnitail 查看初始值
- -XX: + PrintFlagsFinal 查看最终值
- -XX: + UnlockExperimentalVMOptions 解锁实验参数
- -XX: + UnlockDiagnosticVMOptions 解锁诊断参数
- -XX: + PrintCommandLineFlags 打印命令行参数
PrintFlagsFinal
-
bool UseG1Gc = false
-
bool UseGcLogFileRotation = false
-
bool UseGCOverheadLimit = true
-
uintx InitialHeapSize :=13212313
-
uintx MaxHeapSize := 233333332323
-
uintx MaxNewSize := 2334324243
= 表示默认值
:= 被用户或者JVM修改后的值
使用命令
java --XX:+PrintFlagsFinal -version
// 保存文件
java --XX:+PrintFlagsFinal -version > flag.txt
// 下载文件
xz flag.txt
JPS
root: jps
jps -l // 查看完整包名
Jinfo 运行时
jinfo -flag MaxHeapSize 23789
jinfo -flags 23789
- 查看最大内存
- jinfo -flag MaxHeapSize 3176
- 查看垃圾回收器
- jinfo -flag UseConcMarkSweepGc 3176
- jinfo -flag UseG1Gc 3176
- jinfo -flag UseParallelGc 3176
1.3、jstat查看JVM统计信息
- 类装载
- 垃圾收集
- -gc 、 -gcuti、 -gccause、 -gcnew 、 -gcold
- JIT编译
- -compiler 、 -printcompilation
1.4、jmap +MAT 演示内存溢出
1.5、导出内存映像文件
- 内存溢出自动导出
-XX: +HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath = ./
- 使用jmap 命令手动导出
1.6、MAT分析内存溢出
1.7、Jstack与线程状态
jstack 实战死循环与死锁
jps -l 查看有几个进程
jstack 15764 > 15764.txt
sz 15764.txt 下载
1.8、jstack实战死循环与死锁
实战死循环导致CPU飙高
2、基于Btrace的监控调试
2.1、btrace 入门
- brace安装入门
- Brace使用想起
Btrace 简介
- Btrace可以动态地向目标应用程序的字节码注入追踪代码
- JavaComplierApi、JVMTI、Agent、Instrumentation + ASM
Btrace 安装
- 新建环境变量 BTRACE_HOME
- 添加Path: %BTRACE_HOME %\bin
两种运行脚本方式
- 在JVisualVM中添加Btrace 插件,添加classpath
- 使用命令行btrace <trace_script>
2.2、拦截构造函数,同名函数
使用详解
- 拦截方法
- 普通方法 @OnMethod(clazz = "", method="")
- 构造函数 @Onmethod( class= "" , method = "")
- 拦截同名函数,用参数区分
- 拦截时机
- Kind.ENTRY: 入口,默认值
- Kind.RETURN: 返回
- Kind.THROW: 异常
- Kind.Line: 行
- 拦截this 、参数 、 返回值
- this : @Self
- 入参: 可以用AnyType, 也可以用真实类型,同名的用真是的
- 返回: @Return
- 获取对象的值
- 简单类型: 直接获取
- 复杂类型:反射,类名 + 属性名
- 其他
2.5、注意事项
- 默认只能本地运行
- 生产环境下可以使用,但是被修改的字节码不会被还原
3、Tomcat 性能监控与调优
3.1、tomcat远程debug
startup.sh 加入 jpda start 之前 加入
bin/catalina.sh 加入
3.2、tomcat-manger监控
3.3、psi-probe 监控
3.4、tomcat优化
- 内存优化
- 线程优化
- 配置优化
4、Nginx 性能监控与调优
4.1、nginx 安装
4.2、ngx_http_stub_status监控连接信息
添加状态监控
location = /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
4.3、ngxtop 监控请求信息
-
安装python-pip
- yum install epel-release
- yum install python-pip
-
安装ngxtop
- pip install ngxtop
ngxtop 使用
- 指定配置文件: ngxtop -c /etc/nginx/nginx.conf
- 查询状态是200:ngxtop -c /etc/nginx/nginx.conf -i 'status == 200'
- 查询访问最多ip: ngxtop -c /etc/nginx/nginx.conf -g remote_addr
4.4、nginx-rrd 图形化监控
1、首先安装监控状态
location = /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
2、安装php依赖
yum install php php-gd php-soap php-mbstring php-xmlrpc php-dom php-fpm -y
3、nginx 整合php-fpm
修改/etc/php-fpm.d/www.conf 文件中的user 和group, 与nginx.conf 中的user一致
user = nginx
group = nginx
4、启动php-fpm 服务
systemctl start php-fpm
5、修改nginx的配置
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
6、重启nginx
nginx -s reload
7、编写index.php
8、打开浏览器访问
localhost:80/index.php
9、安装rrdtool 相关依赖
yum install perl rrdtool perl-libwww-perl libwww-perl-rrdtool -y
10、安装nginx-rdd
wget http://soft.vpser.net/status/nginx-rrd/nginx-rrd-0.1.4.tgz
tar zxvf nginx-rrd-0.1.4.tgz
cd nginx-rrd-0.1.4
cp usr/sbin/* /usr/sbin # 复制主程序文件到/usr/sbin 下
cp etc/nginx-rrd.conf /etc # 复制配置文件到 /etc 下
cp html/index.php /usr/share/nginx/html/
11、修改配置vi /etc/nginx-rrd.conf
RRD_DIR = "/usr/share/nginx/html/nginx-rrd";
WWW_DIR = "/usr/share/nginx/html/";
13、新建定时任务
crontab -l
* * * * * /bin/sh /usr/sbin/nginx-collect
*/1 * * * * /bin/sh /usr/sbin/nginx-graph
查看任务
tail -f /var/log/cron
14、ab压测
安装ab压测工具: yum -y install httpd-tools
ab -n 10000 -c 10 http://127.0.0.1/index.html
4.5、nginx优化
- 增加工作线程数和并发连接数
- 启用长连接
- 启用缓存、压缩
- 操作系统优化