随笔分类 - programming c linux
摘要:今天看公司代码时,发现代码里面都是使用epoll,有的备注 epoll 效率比poll 高!!! 所以就得说一说了;宏观看一看epoll 和select的实现: select原理概述 调用select时,会发生以下事情: 从用户空间拷贝fd_set到内核空间; 注册回调函数__pollwait; 遍
阅读全文
摘要:今天查问题时, ssh 登录后台发现 需要输入密码,输入密码后弹出一个二维码, 然后扫码获取秘钥。输入秘钥登陆!!! 真是恶心了一把,找手机都花了不少时间!!!! 那么怎样干掉输入密码这些操作呢??? 所以需要思考一番!!!! man 文档中有 When bash is invoked as an
阅读全文
摘要:在内存发生panic时,需要把panic的日志保存下来。以方便日后进行分析。 一般主机为x86的时候,panic 使用 kdump保存log。由于它使用占用大量内存和硬盘。所以当磁盘空间不够时,就会遇到问题。 所以此时使用crashlog. carshlog在内核中有一个叫crashlog的东东,它
阅读全文
摘要:这几天多个版本出现了多个内存泄漏问题 怎么办???? Q1:进程调用某库函数分配内存不释放, 但是在进程退出时,统一释放内存,valgrind 检查不出来,但是频繁调用库函数会耗尽内存。怎么快速定位那个库函数导致!!!!!除了看源码这种sa办法 Q2:某些设备不支持跑valgrind 怎么办??-
阅读全文
摘要:Q:今天有人问我lsof是怎么实现的? 然后当时在想要是我应该怎么实现? 通过每个进程的file_table list 出来!!! 实际上怎么出来的呢??strace lsof 结果可知 就是通过读取 /proc/pid/fdinfo 。。。。。。。。。。。。。。平时会用到proc/pid/ 却没有
阅读全文
摘要:今天处理一个cpu标高的bug,原因:在poll 返回后将error事件当做POLLIN事件处理,fd 一直都在唤醒线程处理,但是rcv的时候没有数据; unsigned int datagram_poll(struct file *file, struct socket *sock, poll_t
阅读全文
摘要:Q1:线上问题的process 都为release版本!不带调试信息怎么查?(目前有时需要查线上问题, 不得不解决这个问题) 之前查问题都是编译环境编译一个带有debug信息的版本进行替换来调试,但是这是对必现问题,使用gdb调试没问题,如果是非必现问题呢?替换进程重新运行现象就会消失! 解决方法:
阅读全文
摘要:static int lock_pidfile__(FILE *file, int command, struct flock *lck) { int error; lck->l_type = F_WRLCK; lck->l_whence = SEEK_SET; lck->l_start = 0;
阅读全文
摘要:eBPF实质上是一个内核注入技术 用户态可以用C来写运行的代码,再通过一个Clang&LLVM的编译器将C代码编译成BPF目标码; 用户态通过系统调用bpf()将BPF目标码注入到内核当中,并创建必要的eBPF-maps。eBPF具有用作socket filter,kprobe处理器,流量控制调度,
阅读全文
摘要:在对 socket 绑定和监听前经过了以下设置 无阻塞(O_NONBLOCK) TCP 无延时(TCP_NODELAY) 可重用地址(SO_REUSEADDR) 对于 clien server需要设置: 无阻塞 server -->无延时 1、SO_REUSEADDR选项: 在服务器程序中,SO_R
阅读全文
摘要:昨天帮人查bug,发现了一个vfork fork exit _exit不分导致的问题。 使用vfork 后调用exit导致的问题。 主要需要弄清楚他们之间的区别: 1. fork ():子进程拷贝父进程的数据段,代码段 vfork ( ):子进程与父进程共享数据段2. fork ()父子进程的执行次
阅读全文
摘要:查线上问题: 1、cpu idle 为0 ,I/O高, pidstat 发现进程io 不高,那就是cache mem引起系统io高了 没有vmstat,只能使用sar工具了,使用sar -r 查看buddyinfo 发现内存碎片化严重。同时drop_cache值为3一直在释放cache , eg:对
阅读全文
摘要:gdb调试不管是本地调试还是远程调试,都是基于ptrace系统调用来实现。 ptrace系统调用提供了一种方法,让父进程可以观察和控制其它进程的执行,检查和改变其核心映像及寄存器。主要用来实现断点调试和系统调用跟踪可通过man手册查看具体使用:man ptrace SYSCALL_DEFINE4(p
阅读全文
摘要:void event_warnx(const char *fmt, ...) EV_CHECK_FMT(1,2); #define EV_CHECK_FMT(a,b) __attribute__((format(printf, a, b))) void event_debugx_(const cha
阅读全文
摘要:对coredump的分析中,是依赖于core文件的,而core文件中也几乎包含了程序当前的所有状态(堆栈、内存、寄存器等)。然而在实际的线上环境中,由于core文件太大、保存core文件耗时太久,出于线上系统的稳定性与快速恢复考虑,我们往往不会保留core文件。同时,程序堆栈被破坏的情况下,即使我们
阅读全文
摘要:查看二进制文件的编译器版本 strings info.o |grep GCCGCC: (crosstool-NG linaro-1.13.1-2012.02-20120222 - Linaro GCC 2012.02) 4.6.3 20120201 (prerelease) 查看依赖的共享库read
阅读全文
摘要:ECONNABORTED 该错误被描述为“software caused connection abort”,即“软件引起的连接中止”。原因在于当服务和客户进程在完成用于 TCP 连接的“三次握手”后,客户 TCP 却发送了一个 RST (复位)分节,在服务进程看来,就在该连接已由 TCP 排队,等
阅读全文
摘要:wchan表示导致进程睡眠或者等待的函数 SS iproute2,nslookup,dig 从某种意义上说,iproute工具集几乎可以替代掉net-tools工具集,具体的替代方案是这样的:用途 net-tool(被淘汰) iproute2地址和链路配置 ifconfig ip addr, ip
阅读全文
摘要:转载自: http://www.cnhalo.net/2016/08/13/linux-tcp-nagle-cork/ http://abcdxyzk.github.io/blog/2018/07/08/kernel-nodelay_cork/ 糊涂窗口综合症(Silly Windw Syndrom
阅读全文