十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
串口发送的数据是8位的,最大为255,就是FF,如果要发送大于255的数,必须变成几个字节发送,例如要发送十进制2315,就要将数据拆分 data(0)=2315/256; data(1)=2315%256; 这样就拆分开数据,再将数据发送出去。
创新互联建站提供高防服务器、云服务器、香港服务器、成都移动服务器托管等
用vim打开文件,在vim编辑器里使用命令%!xxd,文件内容全部变成16进制了。
在程序中打开你的串口设备,int fd; fd = open("/dev/ttyS1",O_RDWD);
比如你要发送0x01,0x02,0x03,0x04,
char buf[256]={0x01,0x02,0x03,0x04};
write(fd,buf,4);
直接往你的串口写四个字节的数就可以了,在你的另一个程序中读取你往串口写的那几个数,十六进制打印出来就可以了。
找到最耗CPU的java线程
ps命令
命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid
结果展示:
这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息。 比如你想分析一下一个java进程的一些运行瓶颈点,可以通过该命令找到所有当前Thread的占用CPU的时间,也就是这里的最后一列。
比如这里找到了一个TID : 30834 ,所占用的TIME时间最高。
通过 printf “%x\n” 30834 首先转化成16进制, 继续通过jstack命令dump出当前的jvm进程的堆栈信息。 通过Grep命令即可以查到对应16进制的线程id信息,很快就可以找到对应最耗CPU的代码快在哪。
简单的解释下,jstack下这一串线程信息内容:
Java代码
“DboServiceProcessor-4-thread-295” daemon prio=10 tid=0x00002aab047a9800 nid=0x7d9b waiting on condition [0x0000000046f66000]
nid : 对应的linux操作系统下的tid,就是前面转化的16进制数字
tid: 这个应该是jvm的jmm内存规范中的唯一地址定位,如果你详细分析jvm的一些内存数据时用得上,我自己还没到那种程度,所以先放下
top命令
命令:top -Hp pid
结果显示:
和前面的效果一下,你可以实时的跟踪并获取指定进程中最耗cpu的线程。 再用前面的方法提取到对应的线程堆栈信息。
判断I/O瓶颈
mpstat命令
命令:mpstat -P ALL 1 1000
结果显示:
注意一下这里面的%iowait列,CPU等待I/O操作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的。
通过这个参数可以比较直观的看出当前的I/O操作是否存在瓶颈