- 博客(35)
- 收藏
- 关注
原创 shell脚本实现某目录所占磁盘空间大于门限值时触发删除操作
// A code block#!/bin/bashDir=~/tmpLineNum=$(ls -lrt $Dir | wc -l);DeleteNum=$(expr ${LineNum} \* 3)DeleteNum=$(expr ${DeleteNum} / 4)DiskSpaceThreshold=1 #G,被检测目录所占磁盘空间的上限,超过这个数就会触发删除操作echo $LineNumecho $DeleteNumcd $DirResult=$(du -sh | gr
2021-08-20 10:53:39
628
原创 异常死锁问题定位
一、根据log或现象初步判断表现出异常的线程如:我遇到一起死锁的例子,现象是websocket通信突然断开,无法处理任何消息。于是把websocker的数据处理线程的调用栈用gdb打印出来,如下:Thread 24 (Thread 0x7f37a37fe700 (LWP 20827)):#0 __lll_lock_wait () at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135#1 0x00007f37f41dbe42 in __G
2021-07-27 19:09:08
510
原创 搜集程序依赖库
#!/bin/shexe="posStartTest"des="./"deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')cp $deplist $des关键字段解释:1、exe:进程名2、搜集的目标路径
2021-07-27 14:42:20
157
原创 docker安装
sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo apt-key fingerprint 0EBFCD88lsb_release -cssudo add-apt-reposit
2021-07-27 14:07:53
126
原创 CPU占用高的一般定位方法
文档:有道云笔记链接链接:http://note.youdao.com/noteshare?id=61ab48d356b90bf802bd8441ccd77063&sub=6A45EBAAD7A542BA8D870105BDB3EF42
2021-07-27 11:18:25
196
原创 git配置
1、git config --global user.name tangtgit config --global user.email “smilettao@163.com”git config --global gitreview.username “ad账号”2、生成密钥ssh-keygen -t rsa -C “smilettao@163.com”3、cat ~/.ssh/id_rsa.pub4、git config --global core.editor “vim”...
2021-07-22 10:27:45
110
原创 C++ new abort
Thread 1 “SLRobot” received signal SIGABRT, Aborted.__GI_raise (sig=sig@entry=6) at …/sysdeps/unix/sysv/linux/raise.c:5151 …/sysdeps/unix/sysv/linux/raise.c: No such file or directory.(gdb) bt#0 __GI_raise (sig=sig@entry=6) at …/sysdeps/unix/sysv
2021-07-22 10:26:32
1458
原创 tcp大包数据发送和接收不一致
typedef struct packge_data_header{| uint16_t totalCount;| uint16_t seq;| uint32_t totalSize;| }PACKAGE_DATA_HEADER;typedef struct nav_header {| uint16_t ICode; ////固定识别码| uint16_t Command; ////命令字| uint16_t se
2021-07-22 10:24:45
1598
原创 文件描述符泄露引发的一系列异常问题
现象:1、机器人上app点击 暂停、继续、任务取消操作,均无效2、ros服务调用失效,程序中无法通过服务调用的形式来给导航下发命令定位过程:1、故障出现时候,看日志有ros服务调用失败的打印,但是此时通过命令行调用ros服务是生效的,这说明ros的服务方是没有问题的。2、查询ros服务调用本质上是通过tcp来实现的,1、需要创建socket2、需要建立tcp连接3、连接成功后开始信息交互3、因为第一步已经排除的服务端的问题,那就是客户端在以上三个环节中出了问题。4、检查是否存在socke
2021-07-22 10:23:31
378
原创 偶现 tcp server端和client端异常关闭,且重连后立马又断开
原因:服务端在收到客户端发的大数据且进入到异常流程时候,没有释放锁,导致死锁。死锁后就无法维持心跳,就会因为心跳超时断开连接,进入timewait状态。客户端触发重连,重连后,服务端已连接队列里有新连接,但是因为服务端套接字accept(接受连接)和处理连接是在一个线程里,所以该新连接一直在已连接队列中达不到处理,5秒后,客户端测到心跳超时,又触发重连。循环往复定位方法:gdb打印服务端套接字监听处理线程的调用栈,发现它死锁了...
2021-07-22 10:17:51
732
原创 机器人扫大地图过程中引发进程崩溃问题
现象:扫大地图过程中,点击扫图完成没有反应,无法结束扫图。定位:一、查看slam进程的log,发现slam进程重启过,但其他进程没有重启记录,说明slam是由于异常退出导致的重启。二、当时由于没有开启core dump,所以没有生成core文件,好在该问题好复现,用gdb把slam程序启起来,然后开始扫大地图。三、一段时间后gdb捕获到进程abot信号,打印调用栈发现,vector容器调用push_back的时候触发了abort,一般这种现象只有两种情况:1、vector的元素调用构造函数出了问
2021-07-22 10:14:58
145
原创 tcp+protobuf引发的问题
现象:slam进程通过protobuf序列化之后发出的数据 到达 SLRobot进程后,SLRobot调用read总是返回0,导致该数据得不到处理。定位:1、在发送端将发送的数据长度打印出来,发现是0结论:probotbuf会对数据进行优化,优化后序列字符串就是空的解决:任务protobuf结构中有一个字段一定要赋予一个非默认值...
2021-07-22 10:13:13
389
原创 排序引发的CPU居高不下的问题
gdb 调试过程中,cpu一直被排序函数占着,排序函数陷入死循环std::sort(vWifiListMulInfo.begin(), vWifiListMulInfo.end(), std::greater())当我们调用sort进行排序的时候,首先会判断元素个数,如果大于16,则先进行快排(分割算法),等数据呈有序小块的时候再调用插入排序进行合并。在快排那里,它首先要找到调用自定义比较函数返回false的那个数据(cmp(first,pivot)),如果返回true就一直向后找,注意这里是没有进行
2021-07-22 10:11:50
185
原创 编译完成后,最后一步链接的时候报错undefined reference
…/…/lib/libcentralPM.so: undefined reference to TestRobotCallback::getDeriveInstance()' ../../lib/libcentralPM.so: undefined reference toAlgorithmCallback::getDeriveInstance()可能原因有两个:1、链接的库中确实没有定义这个符号2、链接的库中定义了这个符号,但是 cmakelist中 设置进程链接库时,没有加入该库如:targe
2021-07-21 15:40:42
519
原创 RST..
在TCP协议中RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。TCP socket在任何状态下,只要收到RST包,即可进入CLOSED初始状态出现RST的情况:1)端口未打开2)连接超时setsockopt的SO_RCVTIMEO选项设置了recv的超时时间3)提前关闭close Socket 时recv buffer 不为空 例如,客户
2021-07-15 12:12:22
185
原创 listen() 的backlog参数
Linux的协议栈维护的TCP连接的两个连接队列:[1]SYN半连接队列;[2]accept连接队列。[1] SYN半连接队列:Server端收到Client的SYN包并回复SYN,ACK包后,该连接的信息就会被移到一个队列,这个队列就是SYN半连接队列(此时TCP连接处于 非同步状态 )。[2] accept连接队列:Server端收到SYN,ACK包的ACK包后,就会将连接信息从[1]中的队列移到另外一个队列,这个队列就是accept连接队列(这个时候TCP连接已经建立,三次握手完成了)。
2021-07-15 12:11:44
173
原创 MSS。。
最大报文段长度(MSS)是TCP协议的一个选项,用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(不包括文段头)。网络上有个MTU,对于以太网来说,MTU是1500字节,除去TCP+IP头的40个字节,真正的数据传输可以有1460,这就是所谓的MSS(Max Segment Size)注意,TCP的RFC定义这个MSS的默认值是536,这是因为 RFC 791里说了任何一个IP设备都得最少接收576尺寸的大小(实际上来说576是拨号的网络的MTU,而576减去IP头的20个字节
2021-07-15 12:11:01
342
原创 RTT RTO
TCP引入了RTT——Round Trip Time,也就是一个数据包从发出去到回来的时间RTO 超时重传时间TCP通过一个timer采样了RTT并计算RTO
2021-07-15 12:10:11
268
原创 time_wait状态
处于该状态下的TCP连接不能立即以同样的四元组建立新连接一、作用1)实现TCP全双工连接的可靠释放确保被动关闭方收到ACK,连接正常关闭,且不因被动关闭方重传FIN影响下一个新连接2)使旧的数据包在网络因过期而消失2MSL:报文最大生存时间,确保旧的数据不会影响新连接二、带来的问题1) 作为服务器,短时间内关闭了大量的Client连接,就会造成服务器上出现大量的TIME_WAIT连接,占据大量的tuple,严重消耗着服务器的资源;2) 作为客户端,短时间内大量的短连接,会大量消耗的Clien
2021-07-15 12:07:57
359
原创 并发编程模型汇总理解
5种io模型:1、阻塞2、非阻塞3、io多路复用4、信号驱动5、异步iotcpserver编程模型:1、accept+read/write + 阻塞io单进程单线程,短连接,一次处理一个客户,无并发性适用于短连接服务,如datetime2、accept+fork +阻塞io多进程,长连接,并发性底,开销大,每个连接一个进程适用于计算响应的工作量大于fork的开销3、accept+thread+阻塞io多线程,长连接,并发性中,开销中,每个连接一个线程比2的开销小,但是该方案的伸
2021-07-15 12:05:08
122
原创 网络通信基础
一、网络概述1.1 网络由若干节点和连接这些节点的链路组成。网络中节点可以是计算机、集线器、交换机或路由器等。网络和网络还可以通过路由器互连起来,构成一个覆盖范围更大的网络,即互联网。因此可以说,网络把许多计算机连在一起,而因特网则把许多网络连在一起。图1 简单的网络(a)和由网络构成的网络(b)1.2 因特网的组成从因特网的工作方式上看,可以划分为以下的两大块:(1) 边缘部分 由所有连接在因特网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。(2)
2021-07-15 11:47:42
290
原创 查找大文件
find . -type f -size +800M如上命令所示,我们仅仅能看到超过800M大小的文件的文件名称,但是对文件的信息(例如,文件大小、文件属性)一无所知,那么能否更详细显示一些文件属性或信息呢,当然可以,如下所示find . -type f -size +800M -print0 | xargs -0 ls -l当我们只需要查找超过800M大小文件,并显示查找出来文件的具体大小,可以使用下面命令find . -type f -size +800M -print0 | xargs -0
2021-07-15 11:43:30
169
原创 gdb常用
查看所有调用栈thread apply all bt一边看源码一边调试focusgdb不打印线程创建退出的信息set print thread-events off
2021-07-15 11:39:51
107
原创 消除指定文件告警的方法
#ifdef __GNUC__#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wold-style-cast"#pragma GCC diagnostic ignored "-Wconversion"#endif#include "slam.pb.h" //消除这个文件的告警#ifdef __GNUC__#pragma GCC diagnostic pop#endif...
2021-07-15 11:36:35
179
原创 进程间通信
进程间通信的方式:进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket。1.管道:管道主要包括无名管道和命名管道:管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信1.1 普通管道PIPE:1)它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端2)它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)3)它可以看成是一种特殊的文件,对于它的读写也可以使用普通的
2021-07-15 11:34:50
109
原创 samba搭建
1、没有建立samba文件目录,根据需要建立个samba文件夹,如mkdir /home/tangt/samba2、没有给samba文件夹足够的权限,根据需要设定文件夹权限,如chmod 777 /home/tangt/samba3、sudo apt-get autoremove samba 卸载所有与samba有关的程序4、sudo apt-get upgrade、sudo apt-get update 两条指令来更新系统所欲的依赖程序。5、sudo apt-get install samba 安
2021-07-15 11:30:45
111
原创 无线网络共享到以太网
编辑文件,需要sudo权限,sudo vim /etc/NetworkManager/system-connections/ethernet-shared字段[ipv4]method改为shared,将字段mac-address注释掉,这样只需要根据字段interface-name为enp3s0来绑定设备然后重启网络,sudo systemctl restart networking,之后enp1s0网卡将会被分配IP,10.42.0.1[connection]id=ethernet-shared
2021-07-15 11:28:18
303
原创 docker安装
sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo apt-key fingerprint 0EBFCD88lsb_release -cssudo add-apt-reposit
2021-07-15 11:18:08
109
原创 左右值、完美转发
一、两条特殊规则:1、当我们将一个左值传递给右值引用参数时,且此右值引用指向模板类型参数(T&&)时,编译器推断模板类型参数为左值引用类型而非左值。2、当我们间接创建一个引用的引用,如类型别名或模板参数,则这些引用形成了折叠:T& &,T& &&,T&& &折叠为T&T&& &&折叠为T&&二、std::move实现:template <typenam
2021-07-15 11:09:31
263
原创 cout无打印问题
uint8_t 是unsigned charcout<<根据参数的不同有多个重载 的版本,uint8_t 被解析成了operator<<(ostream&, unsigned char) 这个版本,导致输出字符,而如果这个字符是不可打印的,就会无显示了
2021-07-15 10:08:10
930
原创 条件变量只有一种正确的使用方式
条件变量只有一种正确的使用方式:std::unique_lock<std::mutex> locker(mutex)while (condition){cond.wait(locker);}std::lock_guard<std::mutex> lck; change conditioncond.notify_one()
2021-07-15 10:04:21
95
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人