随笔分类 - programming c linux
摘要:问题: 系统的内核负载偏高 可以看到 user 以及si hi 也就是 用户态 软中断 硬件中断很低,只是 sy 偏高。 同时cpu 负载1-5-15分钟为:8.77 9.15 9.55 首先面对cpu 高问题我们有什么工具 需要查看什么指标:https://www.cnblogs.com/code
阅读全文
摘要:查一个问题:结果看了一下软中断以及系统 所耗cpu,心中满是伤痕啊 perf 结果一眼可以看到:主要是锁 那么这个lock 是用来干什么的呢?? A:TCP socket的使用者有两种:进程(线程)和软中断。同一时间可能会有两个进程(线程),或位于不同CPU的两个软中断,或进程(线程)与软中断访问同
阅读全文
摘要:https://cloud.tencent.com/developer/article/1150971 前言 说到TCP协议,相信大家都比较熟悉了,对于TCP协议总能说个一二三来,但是TCP协议又是一个非常复杂的协议,其中有不少细节点让人头疼点。本文就是来说说这些头疼点的,浅谈一些TCP的疑难杂症。
阅读全文
摘要:init段 程序初始化入口代码,在main()之前运行。 bss段 BSS段属于静态内存分配。通常是指用来存放程序中未初始化的全局变量和未初始化的局部静态变量。未初始化的全局变量和未初始化的局部静态变量默认值是0,本来这些变量也可以放到data段的,但是因为它们都是0,所以它们在data段分配空间并
阅读全文
摘要:今天看代码的时候注意了一下 hash 以及看了下读书时候的笔记, 主要就是说: hash桶大小以及hash 算法 1、目前hash桶的大小都是素数(和2倍相近的一个素数) 设有一个哈希函数H( c ) = c % N;当N取一个合数时,最简单的例子是取2^n,比如说取2^3=8,这时候H( 1110
阅读全文
摘要:互斥:是指散布在不同进程之间的若干程序片段,当某个进程执行其中的一个程序片段时,其他进程就不能运行它们之中的任一程序片段,只能等到该进程运行完之后才可以继续运行。 同步:是指散布在不同进程之间的若干程序片段,它们的运行必须严格按照一定的先后次序来运行,这种次序依赖于要完成的任务 内核中的同步问题一般
阅读全文
摘要:__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。 __thread变量每一个线程有一份独立实体,各个线程的值互不干扰。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。 今天看代码的时候发现这个工程喜欢用_thread关键字, 各个线程都有自己的一份
阅读全文
摘要:今天看公司代码时,发现代码里面都是使用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
阅读全文

浙公网安备 33010602011771号