Linux系统
文章平均质量分 69
整理常用的Linux系统命令与工具,同时记录一些Linux系统相关的概念,以备查阅。
jiang_T
无无无
展开
-
GDB调试方法
文章目录启动GDB调试coredump的设置与调试常用命令列表部分命令详解break/binfo break以及断点的enable、disable和deleteprint/p 和 ptypethread及info threadwatch常用调试技巧使 print 打印显示完整多线程下锁定当前调试线程调试多进程GDB最详细的文档请参考GDB Documentation。其中给出的关于GDB的简介非常精炼:The purpose of a debugger such as GDB is to allow原创 2022-01-19 17:21:52 · 3666 阅读 · 0 评论 -
自制内存泄漏排查组件
内存泄漏内存泄漏的核心原因是调用分配与释放时没有符合开闭原则。有分配却没有释放,这自然会使得进程的堆内存会越来越少,直到耗尽。一个内存泄漏检测工具需要能够精准地定位到泄漏是由代码中的哪一行所引起的。可以直接使用一些现成的工具进行内存泄漏的排查,比如valgrind、mtrace、ASAN等等。但这些工具往往不适用于在生成环境中实时地检测内存泄漏,而多是用于在发现内存泄漏后进行测试。特别是valgrind和ASAN对性能的影响也比较大,而且不适用于嵌入式系统。那么,是否可以自己写一些小工具,对mall原创 2021-12-24 17:51:10 · 772 阅读 · 0 评论 -
自制死锁检测组件
文章目录死锁组件框架有向图构建以及环的检测测试死锁死锁,简单地说就是一组线程或进程互相之间通过互斥量去竞争资源而导致全部进入永久阻塞的状态。如下图所示,首先线程1获取了互斥锁mutex1,线程2获取了互斥锁mutex2,线程3获取了互斥锁mutex3;此时,线程1想要获取mutex2,则它将阻塞直至线程2释放mutex2;线程2又想要获取mutex3,则它将阻塞直至线程3释放mutex3;线程3又想要获取mutex1,则它将阻塞直至线程1释放mutex1。此时死锁就产生了,其中任何一方都获取不到想要的资原创 2021-12-24 00:14:22 · 663 阅读 · 0 评论 -
锁与原子操作以及CAS的实现
文章目录线程同步锁互斥锁 mutex读写锁 rdlock自旋锁 spinlock原子操作_sync*CAS线程同步当我们对一个变量做增量操作时,其过程通常可分解为以下3步:从内存中将变量读入寄存器在寄存器中对变量做增量操作把新的值写回内存单元当多个线程同时对同一个变量做该增量操作时,如果不进行同步,结果很可能会与预想的不一致。如两个线程同时读出变量的原始值,先后做增量操作后再写回内存,此处涉及两次增量操作,这导致实际效果是只有一次增量操作。锁与原子操作都可以用来实现线程间的同步。锁互斥原创 2021-12-20 11:53:30 · 760 阅读 · 0 评论 -
Linux 网络性能监测
网络性能指标常用于衡量网络性能的指标包括:**带宽、吞吐量、延时、PPS(Packet Per Second)**等。带宽:链路的最大传输速率,单位b/s(bit/s)吞吐量:单位时间内成功传输的数据量,单位b/s(bit/s)或B/s(字节/s)。吞吐量 / 带宽 就是网络的使用率。延时:一般指从一端发出请求到收到另一端的响应,所需要的时间PPS: Packet Per Second(包 / 秒)此外还有网络的连通性(网络能否正常通信)、并发连接数(TCP 连接数量)、丢包率(丢包百分比)原创 2021-11-06 14:19:31 · 1447 阅读 · 0 评论 -
TCP的半关闭状态以及tcp-keepalive
文章目录半关闭状态实现方法tcp-keepalive开启 tcp-keepalive方法1 Linux系统全局开启方法2 setsockopt 设置 socket半关闭状态一次TCP四次挥手的过程如上图所示。设左侧为客户端,右侧为服务端,当客户端发起FIN而关闭其写通道时(对应服务端读通道),服务端进入close_wait状态,但希望推送完所有数据后再关闭整个连接。此时连接处于半关闭状态,客户端只能读,服务端只能写。待服务端发送完所有数据并发送一个FIN后,客户端响应ACK,服务端收到ACK后知道客原创 2021-11-03 17:33:36 · 3541 阅读 · 0 评论 -
Linux 文件I/O性能监测
缓存I/O缓存I/O又称作标准I/O,多数文件系统默认都采用缓存I/O。在 Linux 的缓存 I/O 机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间(用户空间)。优点:减少硬盘读写次数;分离内核空间和用户空间,保护系统安全。缺点:数据可能在用户空间和内核空间之间来回地拷贝,这也会增大CPU及内存的开销。直接I/O应用程序跳过内核空间缓冲区直接访问磁盘,这可以克服缓存I/O的缺点,但应用程序一般需要自己实现缓存。比如数据库程序可能更倾原创 2021-11-03 11:23:11 · 2365 阅读 · 0 评论 -
buffer和cache
buffer和cache $ free -h total used free shared buff/cache availableMem: 1.9G 1.3G 139M 9.5M 514M 481MSwap: 8.4G 233M 8.2Gfree 指令的输出结果中,buff/cache 一列原创 2021-11-03 03:33:43 · 162 阅读 · 0 评论 -
Linux CPU上下文切换性能监测
目录上下文切换1 系统调用上下文切换2 进程上下文切换3 线程上下文切换4 中断上下文切换vmstat测试工具sysbench上下文切换简而言之,就是将上一个任务的寄存器和程序计数器的资源保存起来,然后加载下一个任务的寄存器和程序计数器等,最后跳转到新任务的地址运行。CPU的上下文切换情况可分为:系统调用上下文切换进程上下文切换线程上下文切换中断上下文切换1 系统调用上下文切换进程可通过系统调用从用户态进入到内核态,这个过程存在用户空间和内核空间之间的上下文切换。并且在系统调用结束后需原创 2021-11-03 03:11:12 · 293 阅读 · 0 评论 -
Linux CPU负载性能监测
Linux CPU性能监测平均负载和 CPU 使用率压测命令 stress模拟负载场景监测工具topmpstatpidstat补充:自愿上下文切换和非自愿上下文切换平均负载和 CPU 使用率平均负载是指单位时间内的活跃进程数,也就是处于可运行状态®和不可中断状态(D)的进程数。不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。可以参考这篇笔记。CPU使用率是指单位时间内CPU繁忙情况的统计,与平均负载并不是一个东西。CPU使用率为100%时,是指换算成单个CPU原创 2021-11-03 01:57:40 · 8971 阅读 · 0 评论 -
使用cmake编译项目
Cmake参考文档原创 2021-11-01 20:45:03 · 771 阅读 · 1 评论 -
Linux nc命令
netcatnc 命令即 netcat的简写,功能丰富,可以用于数据的传输,但我常用它来测试服务器端口是否开放。常用参数-l :(listen)将nc启用为服务器并监听指定的端口号,并且开启后必须由客户端主动关闭连接-v :输出用于调试的交互信息-w :(wait)指定一个超时的秒数-u :使用UDP协议,默认是TCP常用方法实例对本地8888端口进行监听,等待客户端发起连接nc -l 8888连接到IP为192.168.2.100的目标主机的8888端口,可测试目标主机是否原创 2021-10-29 12:23:01 · 701 阅读 · 0 评论 -
Linux uptime指令查看设备启动时间和负载情况
uptimeuptime gives a one line display of the following information.The current time,how long the system has been running,how many users are currently logged on,and the system load averages for the past 1, 5, and 15 minutes.示例/$ uptime10:05:5原创 2021-10-22 21:55:16 · 980 阅读 · 0 评论 -
Linux常用系统调试命令
cache和buffer的区别cache是缓存,主要起到加快数据访问速度的作用,数据往往是由访问速度慢的设备流向访问速度快的设备,如:硬盘->内存;内存->L1 cachebuffer是缓冲区,往往是将大规模的小数据量整合成小规模的大数量,从而减少短期内突发IO的次数,数据由速度较快的设备流向速度较慢的设备,如:内存->硬盘nc - netcat验证服务器端口有没有开放mtr - 连通性测试...转载 2021-10-20 22:27:32 · 265 阅读 · 0 评论 -
Linux telnet命令
telnettelnet是TCP/IP协议族的⼀员,是⽹络远程登录服务的标准协议,帮助⽤户在本地计算机上连接远程主机。使⽤⽅式:telnet IP PORT与SSH的本质区别是,telnel是明文传输,ssh是加密传输。我个人也常用telnet来测试某个端口是否开放。$ telnet 220.181.38.148 80Trying 220.181.38.148...Connected to 220.181.38.148. # 端口是开放的Escape character is '^原创 2021-10-20 23:14:17 · 1455 阅读 · 0 评论 -
Linux curl命令
简介curl命令用于向URL传输数据,常用于http接口测试。支持的协议:DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP使用方式举例$ curl "http://www.baidu.com" # 打印出了整个响应报文$ curl -i "http://www.b原创 2021-10-20 23:05:36 · 308 阅读 · 0 评论