uptimejava
topios
vmstat 1编程
iostat 1网络
dstatless
pidstat 1jsp
sar -n DEV 1maven
free -mtcp
jps -lv工具
jinfo -flags pidoop
jstat -gcutil pid 1s
查看gc.log
jstack -l
jstack -l 中查看是否有死锁 #TODO
jmap -histor pid
编写代码时要在关键的位置
* 调用外部服务、远程方式的参数、结果上打印log
* 一些关键的步骤,打印参数等
* 异常处理的地方,打印参数,异常栈
这样就能够在程序抛出异常的时候,经过异常栈以及咱们打印的参数快速的判断是哪里出现了问题。
Preconditions
类或StringUtils.isNotEmpty
、CollectionUtils.isNotEmpty
等进行 for (e in loop) { try { do loop } catch (Exception e) { log and exception handle } }
Collections.unmodifiableCollection
等。常常出现的状况是,在本地开发没有问题、或是在staging测试也没问题,部署到线上启动就报错了。
这个时候仍是须要在编写代码时就提早注意,有哪些用到了依赖于环境的地方
如
* 服务依赖,各个环境的服务配置、服务是否存在
* 端口,是否和已有的程序的端口冲突了
* 权限,写文件或者日志目录是否有权限
另外还有maven引用jar包冲突的,会出现NoSuchMethodError等错误
这个时候,找到哪一个类的版本不一致,在代码中找到对应的依赖的jar包
经过mvn dependency:tree
| grep 进行查看有哪些地方引入了jar包 maven 采用的是按照声明顺序靠前的使用。 当能够进行必定的调试时,只在staging环境或者有一个jsp页面能够调用java代码, 可使用Class.forName(“xxx”).getClassLoader XXX.class.getResource(“xxx.yy.ZZZ”)来查看用的是那个地方的class文件 也能够解压jar包,使用javap -v -p -c 查看class文件内容 另外还有一些工具,像BTrace、housemd、greys来帮助咱们线上调试