java实用小技巧记录

一、Arthas的使用(java诊断工具)

使用阿里巴巴开源的Java诊断工具---Arthas,他可以附着在我们的Java服务器进程上面,查看服务器状态,jvm状态等各种参数指标,还可以进行热更新。

1、下载启动Arthas

wget https://alibaba.github.io/arthas/arthas-boot.jarjava -jar arthas-boot.jar

2、启动后会显示当前机器上面所有的java进程,选择我们需要监控/修改的进程,输入序号回车

3、一些常用命令,如果线上出现问题,可以通过以下命令查看各项指标是否有异常

dashboard——当前系统的实时数据面板thread——查看当前 JVM 的线程堆栈信息jvm——查看当前 JVM 的信息sysprop——查看和修改JVM的系统属性sysenv——查看JVM的环境变量getstatic——查看类的静态属性

1)打印前五名最消耗CPU的线程,可以及时找到CPU过高的代码位置

thread -n 5

2)查看某个函数的调用堆栈

stack <类全包名> <函数名>

3)查看某个函数的哪个子调用最慢,耗时最久的调用会标红显示,可以方便找出某个功能中最耗时的操作

trace <类全包名> <函数名>

4)监控某个函数的调用统计数据,包括总调用次数,平均运行时间,成功率等信息

monitor <类全包名> <函数名>

4、输入exit可以退出当前的连接,但是附着在服务器进程上的Arthas依然在运行,完全退出可以输入shutdown。

二、semaphore的使用(java并发控制)

在Java中,Semaphore(信号量)是一种同步工具,用于控制同时访问某个资源的线程数量。它维护了一个计数器,表示可用的许可数量。当线程需要访问资源时,它必须先获取许可,如果许可数量不足,则线程将被阻塞,直到有可用的许可为止
  1. 创建Semaphore对象并指定初始许可数量:

    Semaphore semaphore = new Semaphore(3); // 创建一个初始许可数量为3的Semaphore
    ```
    
    
  2. 在需要访问受信号量控制的资源之前,线程通过调用acquire()方法来获取许可:

    try {
        semaphore.acquire(); // 获取许可,如果没有可用许可,线程将被阻塞
        // 访问受信号量控制的资源
    } catch (InterruptedException e) {
        // 处理中断异常
    }
    ```
    
    
  3. 在访问资源的操作完成后,线程通过调用release()方法释放许可:

    semaphore.release(); // 释放许可
    ```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值