实际项目中如何进行问题排查

news2024/11/27 4:41:26

Linux自带

  1. 文本操作
    1. 文本查找 - grep
    2. 文本分析 - awk
    3. 文本处理 - sed
  2. 文件操作
    1. 文件监听 - tail
    2. 文件查找 - find
  3. 网络和进程
    1. 网络接口 - ifconfig
    2. 防火墙 - iptables -L
    3. 路由表 - route -n
    4. netstat
  4. 其他常用
    1. 进程 ps -ef | grep java
    2. 分区大小 df -h
    3. 内存 free -m
    4. 硬盘大小 fdisk -l | grep Disk
    5. top
    6. 环境变量 env

JDK自带

  1. jsp:jdk提供的查看java进程的工具
    jps –l # 输出输出完全的包名,应用主类名,jar的完全路径名 
    
  2. jstack:jdk自带的线程堆栈分析工具,使用该命令可以查看或导出java 应用程序中线程堆栈信息
    # 基本
    jstack 2815
    jstack -m 2815 # java和native c/c++框架的所有栈信息
    jstack -l 2815 # 额外的锁信息列表,查看是否死锁
  3. jinfo: JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息
  4. jstat jstat参数众多,但是使用一个就够了
  5. jstat -gcutil 2815 1000 
    
    # 如何使用在线调试工具Arthas?

    举几个例子

  6. 查看最繁忙的线程,以及是否有阻塞情况发生?
  7. 场景:我想看下查看最繁忙的线程,以及是否有阻塞情况发生? 常规查看线程,一般我们可以通过 top 等系统命令进行查看,但是那毕竟要很多个步骤,很麻烦。

    thread -n 3 # 查看最繁忙的三个线程栈信息
    thread  # 以直观的方式展现所有的线程情况
    thread -b #找出当前阻塞其他线程的线程
    
  8. 确认某个类是否已被系统加载?
  9. 场景:我新写了一个类或者一个方法,我想知道新写的代码是否被部署了?

    # 即可以找到需要的类全路径,如果存在的话
    sc *MyServlet
    
    # 查看这个某个类所有的方法
    sm pdai.tech.servlet.TestMyServlet *
    
    # 查看某个方法的信息,如果存在的话
    sm pdai.tech.servlet.TestMyServlet testMethod  
    
  10. 如何查看一个class类的源码信息?
  11. 场景:我新修改的内容在方法内部,而上一个步骤只能看到方法,这时候可以反编译看下源码

    # 直接反编译出java 源代码,包含一此额外信息的
    jad pdai.tech.servlet.TestMyServlet
    
  12. 如何跟踪某个方法的返回值、入参?
  13. 场景:我想看下我新加的方法在线运行的参数和返回值?

    # 同时监控入参,返回值,及异常
    watch pdai.tech.servlet.TestMyServlet testMethod "{params, returnObj, throwExp}" -e -x 2 
    
  14. 如何看方法调用栈的信息?
  15. 场景:我想看下某个方法的调用栈的信息?

    stack pdai.tech.servlet.TestMyServlet testMethod
    

    运行此命令之后需要即时触发方法才会有响应的信息打印在控制台上

  16. 找到最耗时的方法调用?
  17. 场景:testMethod这个方法入口响应很慢,如何找到最耗时的子调用?

    # 执行的时候每个子调用的运行时长,可以找到最耗时的子调用。
    stack pdai.tech.servlet.TestMyServlet testMethod
    

    运行此命令之后需要即时触发方法才会有响应的信息打印在控制台上,然后一层一层看子调用。

  18. 如何临时更改代码运行?
  19. 场景:我找到了问题所在,能否线上直接修改测试,而不需要在本地改了代码后,重新打包部署,然后重启观察效果?

    # 先反编译出class源码
    jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java  
    
    # 然后使用外部工具编辑内容
    mc /tmp/UserController.java -d /tmp  # 再编译成class
    
    # 最后,重新载入定义的类,就可以实时验证你的猜测了
    redefine /tmp/com/example/demo/arthas/user/UserController.class
    

    如上,是直接更改线上代码的方式,但是一般好像是编译不成功的。所以,最好是本地ide编译成 class文件后,再上传替换为好!

    总之,已经完全不用重启和发布了!这个功能真的很方便,比起重启带来的代价,真的是不可比的。比如,重启时可能导致负载重分配,选主等等问题,就不是你能控制的了。

  20. 我如何测试某个方法的性能问题?

  1. monitor -c 5 demo.MathGame primeFactors

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1122310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32F4_USB读卡器(USB_Slave)/USB U盘(Host)

前言 STM32F4芯片自带了USB OTG FS(FS,即全速,12Mbps)和USB OTG HS,支持USB Host和USB Device。 1. USB简介 USB,是英文Universal Serial BUS(通用串行总线)的缩写,是一…

硬盘无法分区的原因以及3种解决方法!

硬盘无法分区的原因 无论是新买的硬盘还是用了很久的硬盘,在分区过程中都可能会遇到硬盘无法分区的问题。在这里我们总结了以下几点原因: 主板生产商为了防止病毒侵入引导区文件在主板进行了设置,导致硬盘无法进行分区。 新买的硬盘没有…

42910-2023 无机胶粘剂高温压缩剪切强度试验方法

1 范围 本文件描述了在高温条件下测定无机胶粘剂压缩剪切强度的试验方法。 本文件适用于300℃~1000℃温度范围内,耐热陶瓷、复合材料及其他非金属材料之间搭接压缩 剪切强度的测定。 2 规范性引用文件 下列文件中的内容通过文中的规范性引用而构成本文件必不可…

一、BurpSuite基本界面学习

一、Dashboard 1.Scan Scan功能:能够对网站进行爬行(主要发现网站可交互的接口和网址关联的路径,结果显示在Target)和代码审计(除了爬行的效果外,一定程度上会进行漏洞发现与查找) 重点&#…

VMware17.0安装教程(2023最新最详细)

目录 一.简介 二.安装步骤 软件:VMware版本:17.0语言:简体中文大小:554.98M安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.6GHz 内存4G(或更高)下载通道①百度网盘丨下载链接: htt…

如何快速从Oracle迁移到Mysql?

database 一、使用navicat工具二、问题 一、使用navicat工具 1、选择工具中的数据传输 2、源选Oracle,目标选Mysql,一直点下一步 二、问题 1、navicat连接oracle报错:Oracle library is not loaded navicat是通过oracle的客户端连接oracle的,报这个错是因为navicat for or…

SpringBoot 入门 参数接收 必传参数 数组 集合 时间接收

接口声明 RestController //表示该类为请求处理类public class HttpDeal {RequestMapping("/login")//这个方法处理哪一个地址过来的请求public String hello(){return "返回给浏览器";}}接收参数 RequestMapping("/login")public String logi…

【tg】2:视频采集的输入和输出

属于libtgcalls模块使用了 media thread和 worker thread 代码分布 视频采集 对外的interface :VideoCaptureInterface static std::unique_ptr<VideoCaptureInterface> Create(std::shared_ptr<Threads> threads

看《软技能》的读后感

最近在图书大夏看了一本书的一部分&#xff0c;书名是《软技能》。本人看到了几个有意思的观点。一是接一些兼职项目。 二是分享自己的技术&#xff0c;让同事能干自己的工作&#xff0c;让自己的工作变得别人也能干&#xff0c;才有机会让自己的职位提升。 三是让手动操作变…

一个功能强大的Flutter开源聊天列表插件

flutter_im_list是一款高性能、轻量级的Flutter聊天列表插件。可以帮助你快速创建出类微信的聊天列表的效果。 目录 预览图示例视频教程如何使用API 预览图 整体长按输入中动图 示例 Examples 视频教程 欢迎通过视频教程学习交流。 如何使用 第一步添加依赖 在项目根…

爬虫进阶-反爬破解7(逆向破解被加密数据:全方位了解字体渲染的全过程+字体文件的检查和数据查看+字体文件转换并实现网页内容还原+完美还原上百页的数据内容)

目录 一、全方位了解字体渲染的全过程 1.加载顺序 2.实践操作&#xff1a;浏览器中调试字体渲染 3.总结&#xff1a; 二、字体文件的检查和数据查看 1.字体文件的操作软件 2.映射关系的建立 3.实践操作&#xff1a;翻找样式和真实内容 4.总结&#xff1a; 三、字体文…

【c++】简单了解运算符重载

引例 class Integer{ public:Integer(int num):_num(num){}int& getValue(){return _num;} private:int _num; };现在有两个Integer对象a,b。想让a和b相加得到的结果给对象c&#xff0c;现在可以肯定的是cab编译后肯定会报错 请注意这条信息no match for operator (oper…

Zookeeper、Kafka集群与Filebeat+Kafka+ELK架构、部署实例

Zookeeper、Kafka集群与FilebeatKafkaELK架构、部署实例 一、Zookeeper1.1、Zookeeper 定义1.2、Zookeeper 工作机制1.3、Zookeeper 特点1.4、Zookeeper 数据结构1.5、Zookeeper 应用场景1.5、Zookeeper 选举机制1.5.1、 第一次启动选举机制1.5.2、 非第一次启动选举机制 二、Z…

信息系统项目管理师教程 第四版【1-共24章整体脑图整理】

信息系统项目管理师教程 第四版 电子版链接 链接&#xff1a;https://pan.baidu.com/s/1cicvAH519G-j2IBjE69JCQhttps://link.zhihu.com/?targethttps%3A//pan.baidu.com/s/1cicvAH519G-j2IBjE69JCQ 提取码&#xff1a;1qaz 如果失效可以用下面这个&#xff0c; 链接&…

Java EE-servlet API 三种主要的类

上述的代码如下&#xff1a; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.i…

MQ相关介绍

【1】MQ&#xff1a;MessageQueue&#xff0c;消息队列。 队列&#xff0c;是一种FIFO 先进先出的数据结构。消息由生产者发送到MQ进行排队&#xff0c;然后按原来的顺序交由消息的消费者进行处理。QQ和微信就是典型的MQ。 为什么要用MQ&#xff08;MQ的优点&#xff09;&#…

Seata学习

Seata Seata 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 官网地址&#xff1a;https://seata.io/zh-cn/index.html 为什么会产生分布式事务&#xff1f; 示例&#xff1a;用户下单后需要创建订单&#xff0c;同时…

关于动态内存管理中的常见练习题

文章目录 前言练习1&#xff1a;练习2&#xff1a;练习3&#xff1a;练习4&#xff1a; 前言 学习完C语言中的动态内存管理&#xff0c;大家开始利用动态内存管理来去开辟空间&#xff0c;经过一顿狂敲代码后&#xff0c;发现了问题&#xff0c;程序要么崩掉&#xff0c;要么运…

字符串的创建(直接赋值与new的区别)- 字符串常量池

文章目录 1.字符串 "hello" 与 new String("hello")的区别2.intern()的使用&#xff1b; 总结 本文开始 1.字符串 “hello” 与 new String(“hello”)的区别 字符串常量池&#xff1a;存储着创建的引用地址的引用 String s1 "hello"; String…

python 之 矩阵相关操作

文章目录 1. **创建矩阵**&#xff1a;2. **矩阵加法**&#xff1a;3. **矩阵乘法**&#xff1a;4. **矩阵转置**&#xff1a;5. **元素级操作**&#xff1a;6. **汇总统计**&#xff1a;7. **逻辑操作**&#xff1a; 理解你的需求&#xff0c;我将为每个功能写一个单独的代码块…