精华内容
下载资源
问答
  • Linux float int和16进制互相转换

    千次阅读 2018-08-23 15:42:28
    之前把float转16进制,也就是转成4个字节,方便使用串口传输嘛。使用的方法是: //float 转 16进制 float x_pid_p = 15.0; unsigned char * bValue = (unsigned char *)& x_pid_p; printf("%x\t%x\t%...

    Linux 上float int和16进制互换操作。之前把float转16进制,也就是转成4个字节,方便使用串口传输嘛。使用的方法是:

    //float 转 16进制
    float x_pid_p = 15.0;
    unsigned char * bValue = (unsigned char *)& x_pid_p;
    printf("%x\t%x\t%x\t%x\n", bValue[0], bValue[1], bValue[2], bValue[3]);
    set_buf[0] = bValue[0]; 
    set_buf[1] = bValue[1];
    set_buf[2] = bValue[2];
    set_buf[3] = bValue[3];
    
    //16进制 转 float
    //data是接受到的数据
    float x;
    unsigned char c[4];
    c[0] = data[1];
    c[1] = data[2];
    c[3] = data[3];
    c[4] = data[4];
    memcpy(&x,c,4);

    当然,上面的float换成int也可以,在gcc编译器下面,int也是4个字节的。

    今天想说的,就是使用memcpy这个函数,可以任意转化。memcpy第一个参数,是目的地址,第二个参数是源地址,第三个是拷贝字节数。下面说的是float的相互转换。

    //float型,下面c中第一个字节0xff,后面四个是float对应的内容。
    float a = 10.5;
    char c[5];
    c[0]=0xff;
    memcpy(c+1,&a,4);
    //再把对应的float拷出来
    float b;
    memcpy(&b,c+1,4);

    再说一下int型,可以根据自己的数据的大小,然后选择拷贝几位,如果我的数据是0-255,那么我直接拷贝一位就行了。

    //int型,只拷贝一位就够了,高位自动忽略
    int a=13;
    char c[5];
    c[0] = 0xff;
    memcpy(c+1,&a,1);
    //转化回来,也只需要拷贝1位就好
    int b;
    memcpy(&b,c+1,1);
    printf("%d\n",d");

    如果,设置的int的取值范围是两个字节,那就取两位。

    同样的,如果是char数据之间拷贝也可以,因为他是直接把那么多位地址直接拷贝一下,使用起来比之前的方法简单多了。记录一下,方便自己,也方便和我一样的人。

    展开全文
  • 背景记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样...top命令在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按cpu使用率排序1、上图中可...

    背景

    记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高的线程?

    0fd36888ae8ed64543062983064e4082.png

    当然一个正常的程序员不会写出上述代码,这里只是为了让一个线程占用较高的cpu资源。

    top命令

    在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按cpu使用率排序

    6cba9945f6f97256af9b3be0901e80b4.png

    1、上图中可以看出pid为23344的java进程占用了较多的cpu资源;

    2、通过top -Hp 23344可以查看该进程下各个线程的cpu使用情况;

    5a7a8a0321d9ceaa36becb1e71a87971.png

    上图中可以看出pid为25077的线程占了较多的cpu资源,利用jstack命令可以继续查看该线程当前的堆栈状态。

    jstack命令

    通过top命令定位到cpu占用率较高的线程之后,继续使用jstack pid命令查看当前java进程的堆栈状态

    a3494958ec4d0696e1af7dd71bc79aa0.png

    jstack命令生成的thread dump信息包含了JVM中所有存活的线程,为了分析指定线程,必须找出对应线程的调用栈,应该如何找?

    在top命令中,已经获取到了占用cpu资源较高的线程pid,将该pid转成16进制的值,在thread dump中每个线程都有一个nid,找到对应的nid即可;隔段时间再执行一次stack命令获取thread dump,区分两份dump是否有差别,在nid=0x246c的线程调用栈中,发现该线程一直在执行JstackCase类第33行的calculate方法,得到这个信息,就可以检查对应的代码是否有问题。

    通过thread dump分析线程状态

    除了上述的分析,大多数情况下会基于thead dump分析当前各个线程的运行情况,如是否存在死锁、是否存在一个线程长时间持有锁不放等等。

    在dump中,线程一般存在如下几种状态:

    1、RUNNABLE,线程处于执行中

    2、BLOCKED,线程被阻塞

    3、WAITING,线程正在等待

    实例1:多线程竞争synchronized锁

    1d96d749798063f5a39f697af1a615af.png

    很明显:线程1获取到锁,处于RUNNABLE状态,线程2处于BLOCK状态

    1、locked <0x000000076bf62208>说明线程1对地址为0x000000076bf62208对象进行了加锁;

    2、waiting to lock <0x000000076bf62208> 说明线程2在等待地址为0x000000076bf62208对象上的锁;

    3、waiting for monitor entry [0x000000001e21f000]说明线程1是通过synchronized关键字进入了监视器的临界区,并处于"Entry Set"队列,等待monitor,具体实现可以参考深入分析synchronized的JVM实现;

    实例2:通过wait挂起线程

    static class Task implements Runnable { @Override public void run() { synchronized (lock) { try { lock.wait(); //TimeUnit.SECONDS.sleep(100000); } catch (InterruptedException e) { e.printStackTrace(); } } }}

    dump结果

    b929519db165c70187d195e2d366823a.png

    线程1和2都处于WAITING状态

    1、线程1和2都是先locked <0x000000076bf62500>,再waiting on <0x000000076bf62500>,之所以先锁再等同一个对象,是因为wait方法需要先通过synchronized获得该地址对象的monitor;

    2、waiting on <0x000000076bf62500>说明线程执行了wait方法之后,释放了monitor,进入到"Wait Set"队列,等待其它线程执行地址为0x000000076bf62500对象的notify方法,并唤醒自己。

    展开全文
  • linux java 常用命令

    2021-03-03 17:37:38
    printf "%x" pid //pid16进制转换 jstack pid grep 16进制的线程号 //查看该子进程占用的进程代码块 jstat -gcutil pid interval //按interval定时打印gc情况 jmap -histo:live pid | more //查看当前pid各个...
    1. 常用命令
    • top //查看cpu进程占用情况
    • top -Hp pid //查看某个 pid子进程占用情况
    • printf "%x" pid //pid16进制转换
    • jstack pid grep 16进制的线程号 //查看该子进程占用的进程代码块
    • jstat -gcutil pid interval //按interval定时打印gc情况
    • jmap -histo:live pid | more //查看当前pid各个对象实例占用大小,降序排列
    • jmap -heap pid // 查看当前堆栈内存分配情况
    • 欢迎补充
    展开全文
  • linux cpu飙高的原因

    2020-05-23 11:21:28
    目录 cpu飙高处理步骤 内存飙高处理步骤 GC引起的单核飙高 常见SY飙高 IO飙高 ...找到CPU负载高的线程pid 8627, 把这个数字转换成16进制,21B3(10进制转16进制,用linux命令: printf %x 8627) jstac

    目录
    cpu飙高处理步骤
    内存飙高处理步骤
    GC引起的单核飙高
    常见SY飙高
    IO飙高

    cpu飙高处理步骤

    1. top查找出哪个进程消耗的CPU高(top -c)

    2. top -h -p查找出哪个线程消耗的cpu高(top -h -p pid)

    这个命令就能显示刚刚找到的进程的所有线程的资源消耗情况。

    1. printf%x进行pid的进制转换

    找到CPU负载高的线程pid 8627, 把这个数字转换成16进制,21B3(10进制转16进制,用linux命令: printf %x 8627)

    1. jstack记录进程的堆栈信息

    执行jstack -l pid,拿到进程的线程dump文件。这个命令会打出这个进程的所有线程的运行堆栈。

    1. 找出消耗CPU最高的线程信息

    搜索“21B3”,就是搜一下16进制显示的线程id。搜到后,下面的堆栈就是这个线程打出来的。

    内存飙高处理步骤

    1. jstat命令查看FGC发生的次数和消耗的时间,次数越多,耗时越长说明存在问题;

    Jstat命令可以观察到classloader,compiler,gc相关信息。可以时时监控资源和性能

    1. 连续查看jmap -heap查看老生代的占用情况,变化越大说明程序存在问题;

    Jmap命令(jmap [ option ] pid)得到运行java程序的内存分配的详细情况。例如实例个数,大小等

    1. 使用连续的jmap -histo:live命令导出文件,比对加载对象的差异,差异部分一般是发生问题的地方。

    GC引起的单核飙高

    1. 单个CPU占用率高,首先从GC查起。

    常见SY飙高
    1.线程上下文切换频繁

    1. 线程太多

    2. 锁竞争激烈

    IO飙高

    1. 如果IO的CPU占用很高,排查涉及到IO的程序,比如把OIO改造成NIO。

    抖动问题
    原因:字节码转为机器码需要占用CPU时间片,大量的CPU在执行字节码时,导致CPU长期处于高位;

    现象:“C2 CompilerThread1”守护进程,“C2 CompilerThread0”守护进程CPU占用率最高;

    2.cpu 飙高
    1, top查找出哪个进程消耗的CPU高(top -c)

    2.,top -h -p查找出哪个线程消耗的cpu高(top -h -p pid)
    这个命令就能显示刚刚找到的进程的所有线程的资源消耗情况。

    3, printf%x进行pid的进制转换
    找到CPU负载高的线程pid 8627, 把这个数字转换成16进制,21B3(10进制转16进制,用linux命令: printf %x 8627)

    4, jstack记录进程的堆栈信息
    执行jstack -l pid,拿到进程的线程dump文件。这个命令会打出这个进程的所有线程的运行堆栈。

    5, 找出消耗CPU最高的线程信息
    srace -p

    展开全文
  • linux cpub飙高的处理

    2020-05-23 11:23:31
    目录 cpu飙高处理步骤 内存飙高处理步骤 GC引起的单核飙高 ...找到CPU负载高的线程pid 8627, 把这个数字转换成16进制,21B3(10进制转16进制,用linux命令: printf %x 8627) jstack记录进程的堆栈信
  • Linux 查看线程占用情况

    千次阅读 2016-01-08 14:14:50
    查看线程资源占用情况 top -H -p pid 找到对应的pid,转换成16进制 printf 0x%x pid 然后jstack pid > 文件 在文件中查找16进制pid
  • linux命令

    2019-06-25 23:04:22
    1、使用 top 定位到占用CPU高的进程PID ps aux | grep PID 查看进程明细 2、通过 ps -mp pid -o THREAD,tid,time | sort -rn 命令 查看进程下 ...4、jstack pid |grep tid -A 30 用转换后的16进制线程 查看详细...
  • 首先使用top命令查看jvm进程运行的pid,占用cpu情况。 再使用top -Hp pid查看那个线程pid占用cpu高。...因为在jstack的日志中,线程pid使用16进制,所以将128转换成16进制是0x80,129是0x81。 打开jstack.log...
  • linux上查看java最耗时的线程信息

    千次阅读 2019-04-25 11:00:05
    找到JAVA进程pid ps -ef|grep java或则jps -mlv 找进行下耗时的线程TID 使用top -Hp pid可以查看某个进程...printf "%x\n" [tid] 16进制 java中的线程类相关信息 jstack 线程ID 可以查看某个线程的堆栈情况,...
  • 3、将线程的pid由10进制16进制 3、我们把进程的全部堆栈信息导入到临时文件中 4、通过16进制的线程id去临时文件中查看数据 输入 /线程id 找到我们刚才发现的最耗cpu的线程堆栈,查看原因
  • 1. top 2. 找到 top 中 消耗Cup 最多的pid 3.top -Hp 最大的 Pid 查看 该进程中 的 任务 。 4. 使用 printf "%X\n" pid 转换成 ...5. jstack Pid | grep -30 16进制数 转载于:https://www.cnblogs.com/yuruyi...
  • 3、printf "%x\n" 线程PID 将异常线程的PID转换为 16进制,为后面查找 jstack 日志做准备 4、jstack 进程号 | grep 16进制异常线程号 -A90 定位异常代码的位置 jstack 进程PID | vim +/十六进制线程PID / / 例如...
  • Linux上查找线程使用的CPU时间最长

    千次阅读 2018-04-18 16:58:35
    1. 找出cpu耗用厉害的进程pid 终端执行top命令,然后按下shift+p 查找出cpu利用最厉害的pid号:pid号:31365 2. 根据上面第一步拿到... 将获取到的线程号转换成16进制,去百度转换一下就行 转换的结果:7AD1 ...
  • 1、top后按c查看最耗cpu的进程,得到pid 2、top -Hp pid 查看该进程里的线程...4、将第二步得到的pid转16进制之后在线程栈信息里查找nid等于pid16进制的,就找到最耗资源的线程的栈信息 话不多说了,先来看...
  • Linux-cpu100%排查

    2020-02-28 02:36:29
    1.找到最耗CPU的进程:top命令查看进程运行信息列表,键入P (大P),进程按照CPU使用率从高...3.将线程PID转化为16进制:printf “%X\n” 线程PID。是因为堆栈里,线程id是用16进制表示的(十进制6524转换为十六进制就是1...
  • 1:通过jps命令查看所有进程pid。 2:使用top -p pid 针对你所要查的pid查看这个进程的CPU和...如果你发现某一个PID占用的CPU过高,就拿到这个PID转换成16进制 例如pid为12760转化成16进制31D8,大写换成小写 jstack22
  • 1. 查看占用CPU或内存最高的进程 命令:top 上面那张图中,我们需要关注的就是红框标注的,现在是没有问题的,如果出现不正常的占用时,我们只需要...jstack PID | grep 16进制 -A 30 后面的-A 30意思是显示30行 ...
  • 通过Linux定位堆栈

    2020-03-02 17:11:33
    将需要的线程ID转换为16进制格式: printf “%x\n” tid; 打印线程的堆栈信息: jstack pid |grep tid -A 30
  • LINUX系统:  linux系统比较简单:  1.使用命令 ps -ef | grep 找出异常java进程的pid....看看哪个线程pid占用最多,然后将这个pid转换为16进制,我这里是22718转换完58be,注意要小写      3.js...
  • Linux定位问题线程名

    2020-10-23 11:12:21
    1、首先top命令定位到java进程 pid ...3、将步骤2中定位的pid转换为16进制 printf ‘%x\n’ pid 4、在jstack分析线程的状态 jstack [pid] |grep ‘nid’ pid为步骤1中获取的java进程pid nid为步骤3中转化的数字 ...
  • 用ps+grep找到被测试的进程pid...找到占用cpu最多的子线程pid,并将其转换为16进制。 比如:top -H -p 29128,看到notify的所有子线程。其中,%CPU 比重最大的子线程pid为879,转换成16进制是36f。 3. 执行jstack...
  • linux 常用命令

    2011-10-12 08:54:15
    ps -aef,ps -aux top -H -p 30420,所有该进程的线程都列出来了。看看哪个线程pid占用最多,然后将这个pid转换为16进制,如 44bf,注意要小写 转载于:https://blog.51cto.com/rayrain/685831...
  • jstack pid|grep 16进制的线程id:拿到消耗cpu比较高的线程pid,先转换成16进制的,最后使用 jstack -pid:可以用来分析进程情况 ps -ef|grep java :查看当前服务器中运行的应用 jmap -heap PID: 生成java堆的详细...
  • LINUX系统:linux系统比较简单:1.使用命令 ps -ef | grep 找出...看看哪个线程pid占用最多,然后将这个pid转换为16进制,我这里是22718转换完58be,注意要小写3.jstack20189 > jstack.log 将java进程信息导出到文...
  • cpu过高问题排查步骤以及命令 ...3.线程ID 是十进制的,而堆栈信息中的线程 ID 是16进制的,因此我们需要将10进制的转换成16进制的,并用这个线程 ID 在堆栈中查找。使用 printf "%x\n" [十进制数...
  • pidstat是一个可以监控到线程的监控工具,可以使用-p指定进程ID. pidstat–p <PID> [delay] [times] –u –t ...其中nid为16进制的线程id,转换为10进制后可与之对应。(去掉0x转换10进制) ...
  • Linux下如何对Java线程进行分析?

    千次阅读 2016-11-17 14:34:08
    1. ps -ef | grep java 2. top -Hp $pid shift+t 查看耗cpu时间最多的几个线程, 记录下线程的id 3. 把上诉线程ID转换成16进制小写 printf "%X\n" 4.jstack $pid|grep A -10 16进制线程id

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 124
精华内容 49
关键字:

linuxpid转16进制

linux 订阅