自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(69)
  • 资源 (3)
  • 收藏
  • 关注

原创 [funchook]内核问题定位分析和热补丁制作工具funchook使用方法

1. 缘起该工具是起源于大神dog250的一篇帖子《Linux内核如何替换内核函数并调用原始函数》。通过替换原有函数,我们做很多事情。我常用的就是分析内核问题和制作内核热补丁。虽然它很强大,帮助我解决了不少项目问题。但是每次使用都要重复定义一大堆函数指针,重复变量。繁杂而易错,让我不胜烦恼。在使用中我一直在思考如何将通用的部分封装隐藏起来,提供简单易用的接口,使其更便捷、易用和高效。2. 实现突然有一天,灵感来了,很快就定义好相关的宏接口。细节部分推敲几次后也定了下来。就有了大家看到的funcho

2020-12-19 17:43:17 636 3

原创 如何部署KVM

KVM环境部署

2024-03-21 05:52:07 451

原创 [Apollo Cyber RT] Timer实现

Apollo Cyber Timer的实现详解

2022-11-20 19:42:09 952 1

原创 组播分片报文重组后丢包问题(后续)

上篇组播分片报文重组后丢包问题,分析到最后是接口eth0和eth1在同一个广播域,且两个接口都处于混杂模式导致。解决方案是关闭接口的混杂模式。

2022-10-04 16:35:23 748

原创 组播分片报文重组后丢包问题

eth0和eth1在相同的广播域,且开启了混杂模式。业务组播分片报文,在两个接口都会收到。当同一个大包的多个分片在eth0和eth1上产生重组冲突,协议栈会丢包,导致业务收不到。

2022-09-29 12:01:38 1344

原创 [算法题]合并K个有序链表

合并K个有序链表题目来源题目内容初步分析解题思路代码实现关于二级指针题目来源这是力扣一道困难难度的算法题,题目序号23,链接 https://leetcode-cn.com/problems/merge-k-sorted-lists/ 有兴趣的同学可以上去看下。题目内容给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表

2022-05-08 21:06:48 589

原创 [算法题]返回数组A的元素组成的小于n的最大数

偶然在力扣上看到有人问下图这个问题,激起求解的兴趣。大概要求就是 数组A中提供了可以使用的1~9的数,给定一个数,求使用A数组中元素能组成的小于给定数值的最大的数。给定条件A数组的数是升序排列(不是的话,可以做一个排序操作)。刚开始想了几个解题思路都不太好,后来想到可以先把给定值x转化成digits数组,然后再进行求最大数。这样看起来思路就清晰多了。题解如下:int MaxNumberLessThanN(int Numbers[], int Count, int Value){ int

2022-04-02 13:07:30 7586 10

原创 [C基础]栈、单向链表和队列的简易C实现

C语言比较偏底层,很多常用的数据结构需要自己实现,不像高等语言直接就有现成的类库可使用。1. 栈定义和实现下面是一个栈的简易实现,适合新人入门参考。可以方便的对任意数据类型进行压栈出栈操作。#define MAX_STACK_DEPTH 4096typedef struct _STACK{ void *Array[MAX_STACK_DEPTH]; int Depth; void (*Push)(struct _STACK *,void *); void

2022-03-27 15:16:59 1348

原创 [内存泄漏]kmalloc-128 slab内存泄漏定位过程

kmalloc-128 slab内存泄漏定位过程问题现象进展受阻现网排查分析coredump后记问题现象前几天,技术团队告知,线上几台ARM CentOS设备内存占用高,比其他相同设备占用高约200M。查看 free,meminfo和slabinfo后,怀疑是slab kmalloc-128存在内存泄漏。进展受阻我们发现正常设备和内存占用高设备的 kmalloc-128 占用已经超过177万,粗算下来200多M,刚好是多占用的内存大小。//异常设备的slabkmalloc-128

2022-03-17 10:00:33 2905

原创 【加解密】在线加密工具推荐

最近在定位一些网络问题时,需要抓取物理口报文进行分析。但是在wan出口的报文已经被AES对称加密,抓到的报文是密文,无法确认某些关键报文是否从wan出口发出。这个定位问题带来了不便。当时在想,我知道对称加密的密钥,是否有工具能方便的帮我把密文解密成明文呢?后来在网上找到了这个超级好用的在线加解密工具箱 https://the-x.cn/zh-cn/cryptography/Aes.aspx。它还有其他很多好用的工具,这里重点讲一下加解密部分。它支持DES、TripleDes、AES、RSA、SM2、S

2022-02-21 13:25:47 21356

原创 linux平台内存泄漏定位工具脚本

最新版本已经在github公开了,大家可以自由下载使用。希望能给大家带来便利。还请多多给Star。https://github.com/xqjcool1/mem-leak-diagnose

2022-01-18 16:44:17 7710

原创 [进程crash]ifconfig进程崩溃定位

技术那边新遇到个问题,客户那里设备掉电,重启后发现设备无法联网。通过串口登上去发现除了环回口lo,其他所有接口都没有地址了。 尝试重启业务,重启设备还是不行。 尝试手动ifconfig配置ip,结果ifconfig进程崩溃了,提示segement fault。倒是ip address 可以正常查看接口。 起初我怀疑是掉电导致网卡异常,导致配置丢失和ifconfig不能正常工作。于是查看日志信息和网卡信息。没有看到什么线索,...

2021-10-16 16:56:06 691

原创 [内存泄漏]keepalived进程内存泄漏定位

缘起公司部分项目在部署上通过keepalived实现了了双机热备,通过荣誉和接管,实现高可用性。最近其中一个项目出现了内存耗尽问题,使用<内存问题快速定位工具>定位提示是keepalived进程的rarp socket收报队列挤压了太多数据包导致。 该工具可以快速定位大多数内存问题,详细介绍文档见《内存泄漏定位思路和方法》,在此不再赘述。 分析keepalived我们用的是v2.0.10版本,...

2021-08-28 20:25:12 813 2

原创 linux meminfo VmallocUsed为0问题

为了便于定位内存问题,使用/proc/meminfo中的一些关键变量值,来计算用户态内存占用,内核态内存占用(包含slab占用和vmalloc占用等),以及黑洞内存占用。(详见内存泄漏定位思路与方法)。公司技术同事使用该方法定位了很多项目内存问题。今天技术同事说有个设备内存占用很高,使用定位方法发现存在隐形内存。我登录设备初步排查了黑洞内存常见的几个怀疑点,没有发现问题。随后我再次查看meminfo确认,发现了一个奇怪的现象。[root@localhost ~]# cat /proc/meminfo

2021-06-08 19:01:57 741

原创 加密算法导致业务模块无法卸载问题

业务模块使用了内核的crypto API来对报文进行加解密。之前使用的是内核自带的 aes,des加解密方式。一切正常,模块的加载卸载也OK。(基于CentOS 3.10.0-514版本)最近为了符合国家密码标准,增加了sm4加解密算法。并在业务模块初始化时,调用crypto_register_alg将sm4算法注册起来。然后使用 crypto_alloc_cipher 创建加密cipher,crypto_cipher_setkey设置加密key。调用 crypto_cipher_encrypt_one

2021-04-24 22:54:59 383

原创 业务模块卸载失败定位过程

模块卸载失败定位过程一级目录二级目录三级目录查看服务状态查看卸载进程状态查看进程栈信息查看卡住的工作队列查看异常工作队列进程栈强制产生core文件并使用crash工具打开研究lock信息一级目录二级目录三级目录设备重启服务会先卸载业务模块,然后再重新加载。线上有台设备在重启业务时卡住。查看服务状态[root@localhost ~]# systemctl status BSN● BSN.service - APXBSN BSN SERVICE Loaded: loaded (/usr/l

2021-04-23 15:48:32 317

原创 mips平台下使用jiffies_to_msecs差值计算rtt不准确问题

我们业务模块实现了rtt计算机制,通过发送探测request时,使用jiffies_to_msecs(jiffies)记录下发送时间值。收到探测reply时,再使用jiffies_to_msecs(jiffies)记录下接收时间值。作差得到实时的rtt值。后续还会计算平滑srtt值。该机制在x86平台一直运行正常。最近在mips平台上出现了问题。业务模块统计出来的延时为0ms。实际抓包查看发现延时在7ms左右。明显业务模块统计错误。相同代码,在不同平台表现不一样。这是怎么回事?突然想到,我们使用的是

2021-04-21 22:18:29 703

原创 IPsec加密报文的wireshark查看方法

IPsec加密报文的wireshark查看方法一、抓取并打开ipsec报文二、获取esp配置三、wireshark上配置esp1. "Encapsulating Security Payload"右键-->"协议首选项"-->"ESP SAs ..."2. ESP SAs界面操作3. 解密后的报文IPsec 封装安全负载(IPsec ESP)报文,因为是加密封装报文,wireshark打开后无法查看封装内容。有时候我们需要查看封装的报文内容,以定位一些问题。wireshark支持对ESP的

2021-04-19 22:30:03 9133 4

原创 项目中遇到的pthread_cond_signal/pthread_cond_timedwait使用问题

问题现象项目上遇到一个问题,报文交互经常延时过高,客户非常不满。初步抓包分析通过抓包发现问题出在从物理口收包到我们模块处理时。也就是说不是网络中异常导致的延时过高。是我们处理过程中产生的。但是但从抓包很难确认延时产生在什么位置。需要进一步确认。报文打点确认于是对报文进行了处理,使其记录timestamp,然后在各个关键位置判断当前时间和报文timestamp的差值,如果超过一定范围,则通过log打印出来。通过打点,确认问题发生在 业务模块将 报文放入队列,到主线程从队列取包处理时。这部分的简单

2021-04-08 14:46:44 1206

原创 [内存泄漏]docker使用cgroup memory导致的内存泄漏

docker使用cgroup memory导致的内存泄漏1. 问题现象及分析1.1 问题现象1.2 问题分析2. 解决办法和尝试2.1 升级到修复后的版本。2.2 禁用cgroup的kmem属性。3. 方案无效及分析3.1 确认内核是否支持该选项3.2 新的解决方案太长不看版本1. 问题现象及分析1.1 问题现象公司产品(centos 3.10.0-514)需要用频繁启动docker,每个docker的运行时间不固定,一段时间后设备内存不足。使用内存泄漏分析工具(传送门https://blog.cs

2021-03-30 20:11:26 5531 3

原创 Linux syslog换行符不生效问题

项目中需要使用syslog打印带有换行符’\n’的字符串,期望能够在log里将其分行打印。结果打印出来全在一行内,换行符被以’#012’替代。为了验证问题,简单写了个测试代码:#include <syslog.h>int main(int argc, char *argv[]){ openlog("testlog", LOG_PID, LOG_LOCAL2); syslog(LOG_INFO, "aaaa\nbbbb\n"); closelog();

2021-03-26 16:28:19 1511

原创 内存泄漏快速定位工具

一年前我写过一个linux系统下内存泄漏问题定位方法的帖子《内存泄漏定位思路和方法》。这是我工作中总结出来的,帮助定位了很多项目内存泄漏问题。后来有同事反应,文章步骤较多,需要熟悉相关系统命令。项目上遇到问题后,再安装步骤逐步排查效率较低。询问是否可以做一个内存泄漏快速定位工具出来。于是我抽时间用shell将内存泄漏定位工具写了出来。在问题设备上进行了验证,可以准确提示泄漏位置。工具链接:内存泄漏快速定位工具该工具适合运维/技术支持/研发/测试等在工作中会遇到内存泄漏的相关人员。工具操作非常简单,直

2021-03-23 10:58:45 937

原创 交叉编译tcpreplay

交叉编译tcpreplay前言下载tcpreplay源码配置编译环境前言二级目录三级目录前言最近项目上出现个问题,其中一个报文发出去后,在互联网中被丢包。后续的重传也被丢包。因为该连接只有该数据包被丢弃,前面和后面的数据包都正常传送。怀疑是该报文被网络中某个设备拦截并丢弃。为了验证猜想,准备对被丢弃的报文进行重放测试。设备是arm64的openwrt定制系统,需要交叉编译tcpreplay。在编译过程中颇费了一些周章,所以记录下踩过的这些雷,希望能够帮助到有同样困扰的人。下载tcpreplay源码

2021-03-20 16:43:21 1061 2

原创 [crash分析]诡异的指针地址被改写

最近遇到多次设备"general protection fault: 0000 [#1] SMP"错误。业务代码多个位置位置都出现过,甚至内核代码中都出现过,给定位带来很大难度,随着掌握的信息越来越多,最终将问题根源找到。前后大概折磨了一周多,直到最终定位才松了口气。最初几次是crash在Diff函数中,下面是其中一个crash栈信息://省略无关 #6 [ffff88008651fb30] general_protection at ffffffff8168f1a8 [exception R

2021-02-06 16:25:52 1219

原创 [openwrt]mt7621网卡实现对 ethtool rx-checksum on/off的支持

公司低端产品使用openwrt定制的mips架构设备,在一个项目中出现了网卡大量丢包问题。使用ethtool -S eth0 查看详细统计,发现 rx_checksum_errors 大量上涨。用户业务比较特殊,使用了私有协议。报文二层ethernet的type是0x0800,表示3层是ip协议,但是三层报文不是ip报文,而是用户的私有协议。初步推断是网卡将私有协议当作ip协议进行校验,校验值错误从而将报文丢弃。为了验证问题,使用 ethtool -K eth0 rx-checksum off 将网

2020-12-19 14:46:04 1963 3

原创 [内存泄漏]pppd程序导致的内存泄漏

线上设备出现了内存泄漏,查看相关信息,发现是隐性内存占用过高导致。查阅内存泄漏定位思路和方法,没有找到问题原因。查看线上内存历史统计,发现内存上涨很有规律,大概6天上涨到100%。然后因为内存不足,触发oom,杀掉工作进程后,内存可以下降下来。设备断网的几天内存没有上涨。只有联网时内存消耗才上涨,推断问题和网络数据包相关。杀掉工作进程后内存可以下降,推断内存被缓存在某个位置,进程重启后释放。因为杀掉工作进城后可以释放。所以问题缩小到工作进程以及工作进程拉起的几个相关进程上。挨个kill测试,发现ki

2020-11-26 22:53:19 829 2

原创 [crash分析]报文解密造成的系统crash

现网环境出现了crash,原因是"general protection fault: 0000 [#1] ",也就是说访问了异常地址导致。查看异常调用栈。//...省略部分 #6 [ffff88041fd43830] general_protection at ffffffff8168ef68 [exception RIP: put_page+10] RIP: ffffffff8118edaa RSP: ffff88041fd438e8 RFLAGS: 00010202

2020-09-10 23:06:29 640

原创 [crash分析]让我头疼了好久的一个dst_entry重复释放导致的crash问题

公司产品在升级后出现了crash,分析发现在释放skb时,skb->sp = ffff000000000011,不为NULL,在 secpath_put(skb->sp)时,地址访问异常crash。PID: 8233 TASK: ffff8800d0503ec0 CPU: 0 COMMAND: "in:imklog" #0 [ffff88011fc03710] machine_kexec at ffffffff81059bab #1 [ffff88011fc03770] __cr

2020-09-04 22:56:47 1293

原创 [crash分析]slab内存重叠导致的crash问题

公司设备升级新版本后,出现了crash,描述"general protection fault: 0000 [#1] SMP ",初步看来是访问了异常地址。异常栈如下:PID: 945 TASK: ffff880079231f60 CPU: 0 COMMAND: "config_t/0" #0 [ffff88001037f9d0] machine_kexec at ffffffff81059bab #1 [ffff88001037fa30] __crash_kexec at ffffff

2020-08-31 22:18:47 1401

原创 CPU利用率高的定位思路和方法

1. top命令通过top命令,可以快速查看各cpu利用率,以及进程按利用率从高到底排列的列表。在这里插入代码片

2020-08-26 23:38:14 1480 1

原创 [softlockup crash分析]业务逻辑异常导致的deadloop

公司产品在线上运行中出现了softlockup导致的crash。crash> btPID: 23 TASK: ffff8801694a4e70 CPU: 3 COMMAND: "ksoftirqd/3" #0 [ffff88102d2c3cf0] machine_kexec at ffffffff81059beb #1 [ffff88102d2c3d50] __crash_kexec at ffffffff81105822 #2 [ffff88102d2c3e20] panic

2020-08-12 13:44:01 271

原创 [crash分析]cascade错误,最终发现是内核BUG

我们目前使用的是标准的CentOS 3.10.0-514.26.2版本。因为要做docker产品,为了测试设备可以支持多少个docker,我们使用脚本在设备上不断创建docker并运行我们的产品。但是我们发现每次到了290多个docker后,很快系统就crash了。crash栈大体上有两种:[ 1076.347341] ------------[ cut here ]------------[ 1076.361159] kernel BUG at kernel/timer.c:1105![ 107

2020-08-08 23:22:24 1533

原创 [crash分析]栈破坏分析总结

栈破坏的两种表现1. 栈帧被破坏栈帧被破坏,从寄存器上可以看到栈帧寄存器rbp异常。因为返回地址正常,所以我们能够看到返回地址函数。//栈帧被写坏后的栈表现[New LWP 31418]Core was generated by `./test1'.Program terminated with signal 11, Segmentation fault.#0 0x000000000040053b in test1 ()Missing separate debuginfos, use: d

2020-08-07 23:50:00 2640

原创 [crash分析]Kernel panic - not syncing: Aiee, killing interrupt handler!

公司产品升级后,测试发现下发某个配置失败时会导致系统crash。crash查看栈显示如下,没有有用信息。crash> btPID: 3348 TASK: ffff880175034e70 CPU: 3 COMMAND: "test.sh" #0 [ffff88016c063b38] machine_kexec at ffffffff81059beb #1 [ffff88016c063b98] __crash_kexec at ffffffff81105822 #2 [ffff88

2020-08-06 21:39:19 619

原创 [内存泄漏]Objects remaining in slab_test on kmem_cache_close()

公司产品在重启服务时,log里有如下Call Trace。Jul 29 09:27:39 cpe kernel: [ 997.113469] =============================================================================Jul 29 09:27:39 cpe kernel: [ 997.113474] BUG slab_test (Tainted: G OE ------------ ): Objec

2020-08-01 20:52:48 431

原创 [crash分析]“Kernel panic - not syncing: Aiee, killing interrupt handler”“BUG: scheduling while atomic“

PANIC信息不太常见,crash栈也没太多信息,COMMAND:“rmmod”提示可能是卸载模块时导致的crash。PID: 14829 TASK: ffff88007b478000 CPU: 0 COMMAND: "rmmod" #0 [ffff88004a157b38] machine_kexec at ffffffff81059bab #1 [ffff88004a157b98] __crash_kexec at ffffffff81105812 #2 [ffff88004a157c6

2020-07-05 22:16:37 698

原创 [crash分析]数组越界导致的导致的系统crash

公司设备在项目中遇到了crash问题,查看coredump,是最长前缀匹配的模块中处理异常导致。现象1:查询异常"general protection fault: 0000 [#1] SMP " [exception RIP: _test_ipset_seg_lpm_query+93] RIP: ffffffffa058ce9d RSP: ffff88016951f578 RFLAGS: 00010207 RAX: 80000010241c2865 RBX: ffff8

2020-06-23 22:44:30 999

原创 [softlockup crash分析]一个和timer相关的死锁分析

设备crash,提示 PANIC: “Kernel panic - not syncing: softlockup: hung tasks” 。遇到这个要先确认是真死锁还是软中断执行时间过长被误判死锁。有个简单的办法区分,就是如果异常栈crash在锁等待,那么就是真死锁;如果crash在其他地方,大概率就是执行时间过长被误判死锁。查看异常栈:PID: 0 TASK: ffffffff819c5460 CPU: 0 COMMAND: "swapper/0" #0 [ffff88007f

2020-05-19 22:12:19 617

原创 [crash分析][mips]一个openwrt的patch引发的血案

公司mips设备在运行中总是会莫名的crash,crash点不确定,有在驱动中,有在socket处理中,等等。crash其一://...<4>[ 158.547434] Process ksoftirqd/0 (pid: 3, threadinfo=8fc62000, task=8fc50b20, tls=00000000)<4>[ 158.555684] St...

2020-04-24 23:21:41 2265

原创 [内存泄漏]vmware的ballon内存导致的隐形内存占用过高

公司测试人员告知一台vrrp测试设备内存占用过高,有内存泄漏嫌疑。我将《内存泄漏定位思路和方法》发给他,让他参照分析,正好也验证下文档是否好用,是否需要改进优化。测试人员参照文档分析后,答复说应该是隐形内存占用过高。我登上去后,大概过了一遍,排除了应用程序内存占用,slab内存占用,vmalloc内存占用等相关可能,确实是隐形内存占用过高,看来我的文档还是挺好用的 ???? 。但是这次的隐形内存,...

2020-04-01 18:24:55 3643

memory-diganose-0.03.gz

适合IT、技术支持、运维人员以及其他会遭遇到linux系统内存消耗过高或内存泄漏问题的人员。解压后直接运行脚本,迅速定位问题原因。 更新到0.03版本

2021-03-22

深入浅出mfc

VC++ MFC 开发经典著作 台湾侯捷著

2011-10-20

LoadRunner函数大全之中文解释

LoadRunner 函数大全之中文解释

2011-03-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除