Systemtap 使用了类似于 awk 和 C 语言的脚本语言(类似于 Dtrace 的 D 语言)。
之前写过一篇文章Nginx调试必备,介绍了几种调试Nginx的工具,包括echo、lua、njs,这些工具,都只是方便输出或者打印日志输出一些变量等,方便运维人员查看变量输出,或者自定义变量赋值等
作者:厉辉,腾讯 CSIG 后台开发工程师 本文主要分享火焰图使用技巧,介绍 systemtap 的原理机制,如何使用火焰图快速定位性能问题原因,同时加深对 systemtap 的理解。 让我们回想一下,曾经作为编程新手的我们是如何调优程序的?通常是在没有数据的情况下依靠主观臆断来瞎蒙,稍微有些经验的同学则会对差异代码进行二分或者逐段调试。这种定位问题的方式不仅耗时耗力,而且还不具有通用性,当遇到其他类似的性能问题时,需要重复踩坑、填坑,那么如何避免这种情况呢? 俗语有曰:兵欲善其事必先利其器,个人认
作者:wqiangwang,腾讯 TEG 后台开发工程师 本文通过“Kni 映射到内核的接口未能发送 LACP 报文导致 bond 不能聚合”这个问题,来探索内核调试中,对于正在运行的内核,通过 systemtap 获取关键数据结构的值的通用方法。 背景 DPDK 支持物理端口 通过 kni 映射到内核的虚拟接口作为内核的标准 net device,借助内核完善的生态处理相对复杂的网络协议,如 tcp 等,这样以后,无需在用户态实现这些协议。在 NGW 网关产品中,同样的,从物理端口接收的 LACP
内核开发从业者,都知道一个代码调试"大杀器":printk !除此之外大家依据自己的习惯,还经常用一些诸如kdump这类的复杂工具。对于systemtap,有人可能熟悉有人可能没听过,本文从入门层次简介systemtap的原理和安装使用,分为两篇,本篇主要介绍原理和脚本语法。文章冗长,多处包含"劝退"功能,下面跟我一起"从入门到放弃" 吧 -_-
上一篇《systemtap从入门到放弃(一)》我们知道了什么是systemtap,以及如何书写简单的systemtap脚本。本篇承接上文,介绍systemtap的安装和简易场景应用,通过几个小例子掌握systemtap在内核开发调试中的简单使用。
SystemTap 是对 Linux 内核监控和跟踪的工具,详细的介绍及说明见官网。
1月26日,Sudo发布安全通告,修复了一个类Unix操作系统在命令参数中转义反斜杠时存在基于堆的缓冲区溢出漏洞。当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或 -i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。只要存在sudoers文件(通常是 /etc/sudoers),攻击者就可以使用本地普通用户利用sudo获得系统root权限。目前漏洞细节已公开,请受影响的用户尽快采取措施进行防护。
对于第一种情况,一般可以通过coredump看出。第二个种情况,也可以通过dmesg找到线索(一般是被oom killer杀掉)。但是当后两种情况出现时,往往是大家最抓瞎最手足无措的时候。
言归正传。 很多人看到这个标题的第一印象可能是 —— 这是要讲飞机上的黑匣子么?有点关系,但主要讲软件中的flight data recorder。不过我们先从黑匣子讲起。 Flight Data Recorder(FDR)用于记录飞机行驶过程中的各种关键数据,其规格如下: 电源:115V AC 或 28V DC 电源能力:30天不间断 使用期限:至多6年 包含水下定位装置 能记录25小时不间断数据 能经受1100度高温 FDR的硬件架构: CPU card Analog card Discrete car
bpftrace是基于BPF和BCC构建的开源跟踪程序。与BCC一样,bpftrace附带了许多性能工具和支持文档。但是,它还提供了高级编程语言,使您可以创建功能强大的单行代码和简短的工具。
前言: 在《[linux][pthread]qemu的一次pthread create失败的分析》中分析了pthread失败的原因以及解决方法。修改了pidmax之后,一直没有看到现象发生,但是不能证明问题被解决了,因为当时的环境只有coredump文件,没有找到固定的复现规律。继续观察中。 坏消息是问题又复现了。 好消息是问题能复现了。 分析: 1,clone fail 作者写了脚本,批量启动大量的qemu进程。在启动很大量的qemu之后,会有部分qemu进程crash。结合之前的分析过程,作者判断,
当我们需要对应用程序进行系能分析时,我们通常可以使用perf或者火焰图。 但是这些工具通常只能定性问题,发现那些函数占用cpu较多,需要优化。但是给不出定量的数据, 比如这个函数的耗时情况,它耗时1ms还是5ms。
1、trace、trace-cmd 📷 2、BPF、eBPF https://github.com/iovisor/bcc 3、perf 📷 4、SystemTap https://sourceware.org/systemtap/wiki 5、sysdig 📷 📷
问题 TCP客户端发送数据一般这样写 发送数据调用的是write函数,第一个参数是表示socket的文件指针,后面是要传送的数据指针和数据长度。如果数据长度超过了MSS(TCP传送的最大单元)那么数据会被拆分成多个TCP数据包发送。问题:两个线程同时写入超过MSS大小的数据包那么发送的数据包是否存在乱序 比如:Thread1写入的数据被拆分成P1、P2、P3三个TCP数据包;Thread2写入的数据被拆分成P4、P5、P6。接收端收到是数据包是否会存在“交叉”的情况——P1、P4、P5、P2…… 为了照顾大
现在很多企业单位开始重视零信任网络安全的建设,基于代理流量和外部准入认证,对于外部可见的请求进行安全性的确认。
https://timyang.net/programming/load-average/
Linux 进程的管理和控制是系统管理和应用开发中非常重要的一部分。在 Linux 系统中,有许多工具和命令可以用于进程的管理和控制,例如 ps、kill、top 等。本文将介绍 Linux 进程的管理和控制,包括进程的查看、结束、挂起、恢复等操作。
PostgreSQL提供了功能来支持数据库服务器的动态追踪。这样就允许在代码中的特 定点上调用外部工具来追踪执行过程。
很多人感冒发烧的时候,往往会模仿神农氏尝百草的路子:先尝尝抗病毒的药,再试试抗细菌的药,甭管家里有什么药挨个试,什么中药西药,瞎猫总会碰上死耗子,如此做法自然是不可取的,正确的做法应该是去医院验个血,确诊后再对症下药。
当碰到内核线程的资源使用异常时,很多常用的进程级性能工具,并不能直接用到内核线程上。这时,我们就可以使用内核自带的 perf 来观察它们的行为,找出热点函数,进一步定位性能瓶颈。不过,perf 产生的汇总报告并不直观,所以我通常也推荐用火焰图来协助排查。
OpenIndiana是一个强大的操作系统,基于OpenSolaris,是开源操作系统,可以免费使用,由社区开发,适合做服务器操作系统,也适合做桌面版操作系统。
前言: 前文《[linux][redis]bgsave引起的latency突刺问题分析》分析了redis-server执行bgsave因为fork引起的latency突刺问题。 而在http://antirez.com/news/84中也提到了“However this is definitely not the full story”,剩下的story则是Linux的THP对redis的影响。 分析: 1,THP vs Normal page 配置了THP策略分别是always和never,redis-server和redis-benchmark配置相同的参数,执行bgsave的latency对比:
工具代码中在遍历访问d_lru链表时安全起见本来应该是要加内核dcache_lru_lock锁保护的,但是由于内核未将该锁导出给模块使用,所以代码实现的时候无法加上dcache_lru_lock锁保护,因此存在因刚好访问了被删除的dentry而引起系统panic重启的风险,线上机器跑这个工具还是需要视情况谨慎评估。
ELRepo 仓库是基于社区的用于企业级 Linux 仓库,提供对 RedHat Enterprise (RHEL) 和 其他基于 RHEL的 Linux 发行版(CentOS、Scientific、Fedora 等)的支持。 ELRepo 聚焦于和硬件相关的软件包,包括文件系统驱动、显卡驱动、网络驱动、声卡驱动和摄像头驱动等。
软件开发听上去高大上,但实际很简单,全部活动可以分为两类:造轮子,搭积木。这和建筑行业很相似 —— 甚至相似到软件业懒得自己编词,借用建筑业的architect这样的title为自己所用。我的理解「造轮子」就是做一些基础性的工作,如os,compiler,database,protocol(如tcp/ip),algorithm(如DH,RSA),framework(如rails)等,「搭积木」则更多是应用性的工作,利用手边的组件和工具,做出新的产品和工具。「造轮子」需要的知识和能力一般而言要高于「搭积木」(
Node.js 19 在19日正式发布了,此次更新包括将 V8 JavaScript 引擎更新到 10.7,以及默认启用 HTTP (s)/1.1 KeepAlive。
eBPF (扩展的伯克利数据包过滤器) 是一项强大的网络和性能分析工具,被广泛应用在 Linux 内核上。eBPF 使得开发者能够动态地加载、更新和运行用户定义的代码,而无需重启内核或更改内核源代码。这个特性使得 eBPF 能够提供极高的灵活性和性能,使其在网络和系统性能分析方面具有广泛的应用。此外,eBPF 还支持使用 USDT (用户级静态定义跟踪点) 捕获用户态的应用程序行为。
本文介绍Java诸多优化实例:第一,排查堆上、堆外内存泄露;第二,使用arthas、jaeger、tcpdump、jstack做性能优化;第三,排查进程异常退出的原因,如被杀、System.exit、Java调用的C++发生Crash、Java内Crash;第四,排查死锁的原因,如log4j死锁、封装不严谨导致的死锁
pagefault在使用大量内存的场景下是一个不可忽视的性能损耗,而且在用户态中,该行为是透明的,不好分析和测量,因此必须借助外部工具才能分析。
导读 本文介绍Java诸多优化实例:第一,排查堆上、堆外内存泄露;第二,使用arthas、jaeger、tcpdump、jstack做性能优化;第三,排查进程异常退出的原因,如被杀、System.exit、Java调用的C++发生Crash、Java内Crash;第四,排查死锁的原因,如log4j死锁、封装不严谨导致的死锁 内存泄漏 内存泄露在C++里排查很简单,用钩子函数勾住内存分配和释放函数malloc和free,统计哪些malloc的内存没有free,就可以找出内存泄露的源头。但在Java
译者注:原作者是大名鼎鼎的性能分析专家:Brendan Gregg,现在工作在Netflix,之前工作在Sun,在Sun公司的时候,他就做了大量的性能分析和tracing相关的工作,在Sun的Solaris上存在一种传说中的性能分析和Debug神器: Dtrace,然而,可惜的是,在我们现在的Linux操作系统上并没有Dtrace神器(这可能是因为Dtrace是从Soloris操作系统的衍生品无法迁移到别的操作系统上),Brendan Gregg 在Netflix后,继续利用他的业余时间,利用他曾经在Soloris上的性能分析经验,和对Dtrace工具的理解,研发基于Linux操作系统上的上类似于Dtrace的工具,曾经他在早期的kernel版本上基于perf研发了perf-tools工具,后面在eBPF进入kernel后,开始基于eBPF做性能工具研发的工作,比如bcc工具集,最近又参与了bpftrace的工具。本文主要是Brendan Gregg在介绍 bpftrace在2018年的开发进展,以及对bpftrace的介绍和对Dtrace的区别介绍。
wrk 是一个非常棒的 HTTP 压力测试工具,构建在 Redis、NGINX、Node.js 和 LuaJIT 这几个开源项目的基础之上,充分利用了他们在事件驱动、HTTP 解析、高性能和灵活性方面的优点,并且可以自己写 Lua 脚本来生成测试请求。
阿里云的centos机器和镜像都没有提供debuginfo的源,而且默认开通的centos并没有提供yum的repo配置文件。这样的话很多的性能调试工具,比如systemtap之类的工具基本没办法使用。
某个项目把服务器从 CentOS 操作系统从 5 升级到了 7(3.10.0-693),一切都很顺利,直到我在服务器上闲逛的时候,无意间发现了一个「大问题」:网卡 eth0 在 RX 上存在丢包(dropped)现象,丢得还很有规律,每一两秒丢一个包!
CentOS(Community ENTerprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。
最初这个问题是读者在我的 TCP 掘金小册的《TCP RST 攻击与如何杀掉一条 TCP 连接》小节中的一个留言提出的:「处于 ESTABLISHED 的连接,为什么还要响应 SYN 包?」,这篇文章就来聊聊这一部分的内容。
这篇文章较好的介绍使用 eBPF 对几种语言开发的应用程序进行可观测分析。介绍的也比较详细,对这块有兴趣的同学可以深入学习。
这周帮朋友用 eBPF/SystemTap 这样的动态 tracing 工具做了一些很有趣的功能。这篇文章算是一个总结
BCC包含有关工具,手册页和示例文件的文档,以及有关使用BCC工具的指南,以及有关BCC工具开发的指南和参考指南。它提供了用于在Python,C ++和lua中开发BCC工具的接口(未显示);将来可能会添加更多接口。
今天为大家介绍在kali linux 2020系统中cuckoo软件及沙箱的安装、配置和使用方法。
Node.js 19 在上周已发布,本次更新亮点包括:将 V8 JavaScript 引擎更新到 10.7,以及默认启用 HTTP(s)/1.1 KeepAlive。
作者:wqiangwang,腾讯 TEG 后台开发工程师 内核收发包,可能会由于backlog队列满、内存不足、包校验失败、特性开关如rpf、路由不可达、端口未监听等等因素将包丢弃。 在内核里面,数据包对应一个叫做skb(sk_buff结构)。当发生如上等原因丢包时,内核会调用***kfree_skb***把这个包释放(丢掉)。kfree_skb函数中已经埋下了trace点,并且通过__builtin_return_address(0)记录下了调用kfree_skb的函数地址并传给location参数
最近爆火的ChatGpt相信大家都不陌生,听说它还能写代码,而且能力不凡。作为合格的嵌入式软件工程师,必须得充分利用起来!
这是春哥在去年 OpenResty 大会上的分享实录。满满的干货,我搭配 PPT 整理为三部分,分期发出来给大家。如果是有什么错漏,是我整理的问题。
在日常分析外部软件时,遇到的反调试/反注入防护已经越来越多,之前使用的基于 frida 的轻量级沙盒已经无法满足这类攻防水位的需要,因此需要有一种更加深入且通用的方式来对 APP 进行全面的监测和绕过。本文即为对这类方案的一些探索和实践。
大家应该都知道,在Linux系统中,1000以下的UID是系统保留的UID。随意修改系统上某些帐号的 UID 很可能会导致某些程序无法进行,甚至导致系统无法顺利运行。我们可以通过/usr/share/doc/setup-2.8.71/uidgid来查看具体对应关系,当然不同的版本路径可能不一样,可以用/usr/share/doc/setup*/uidgid来通配。
当我们系统有问题的时候,不要急于去调查我们代码 首先要看的是操作系统的报告,看看操作系统的CPU利用率,看看内存使用率,看看操作系统的IO,还有网络的IO,网络链接数,等等 Windows下的perfmon是一个很不错的工具,Linux下也有很多相关的命令和工具,比如:SystemTap,LatencyTOP,vmstat,sar,iostat,top,tcpdump等等 通过观察这些数据,就可以知道性能问题基本上出在哪里 (1)先看CPU利用率,如果CPU利用率不高,但是系统的吞吐量和系统延迟指标上不去,
领取专属 10元无门槛券
手把手带您无忧上云