随笔分类 -  programming c linux

摘要:说起内存问题 就想起 buffer 和cache 其核心是:buffer和cache对读和写都会混存,只是对象不同,前者是针对块设备,后者是针对文件。 再就是大家都想 重写一下内存池 最后发现 自己写的是一坨屎 作者:韦易笑链接:https://www.zhihu.com/question/2552 阅读全文
posted @ 2021-05-23 21:56 codestacklinuxer 阅读(91) 评论(0) 推荐(0)
摘要:基于套接字的 bufferevent使用 libevent 的底层事件机制来检测底层网络套接字是否已经就绪,可以进行读写操作,并且使用底层网络调用(如 readv 、 writev)来发送和接收数据。 libevent的bufferevent 是基于event_base 的基础上再次封装一层!其本质 阅读全文
posted @ 2021-05-20 18:56 codestacklinuxer 阅读(167) 评论(0) 推荐(0)
摘要:并发编程有两种:消息传递 以及共享内存 消息传递更容易保证程序的正确性!!! 线程同步原则: 尽可能降低共享对象!减少同步的场合 使用高级的并发结构- 任务队列 生产者消费者模型 引用计数 不到万不得已不要使用底层同步源语,只用非递归互斥和条件变量;至于读写锁信号量 这个 还是不用吧!! 读写锁 不 阅读全文
posted @ 2021-05-19 15:10 codestacklinuxer 阅读(101) 评论(0) 推荐(0)
摘要:看下 ngx的内存池,目前发现和STL相差不多 把内存分配归结为大内存分配和小内存分配。若申请的内存大小比同页的内存池最大值 max 还大,则是大内存分配,否则为小内存分配。 大块内存的分配请求不会直接在内存池上分配内存来满足请求,而是直接向系统申请一块内存(就像直接使用 malloc 分配内存一样 阅读全文
posted @ 2021-05-18 11:51 codestacklinuxer 阅读(200) 评论(0) 推荐(0)
摘要:系统整体CPU使用率是多少? 每个CPU呢?CPU负载并发程度? 单线程 多线程? 多进程?那些应用程序/用户在使用CPU 使用了多少?那个内核线程在使用CPU 使用了多少?中断CPU 是多少CPU 互联使用率是多少用户 内核级别在CPU 上的调用路径什么类型的停滞周期 谁测量 为什么测量 测量什么 阅读全文
posted @ 2021-05-16 18:50 codestacklinuxer 阅读(259) 评论(0) 推荐(0)
摘要:这是一般进程的地址空间划分,现在有个问题,如果进程出现使用较多内存,非常明显,在不使用valgrind 工具下 能否看出来大概原因?? top命令我们已经能看出进程的虚拟空间大小(VIRT)、占用的物理内存(RES)以及和其他进程共享的内存(SHR)。但是仅此而已; 但是想知道 更详细的呢?? /p 阅读全文
posted @ 2021-05-14 10:28 codestacklinuxer 阅读(2608) 评论(0) 推荐(0)
摘要:问题: 100g内存 结果内存有90+g内存被使用! 解决: 1、free -m的时候发现cached 较大,大约使用80G;分析可能和文件缓存在内存中相关 2、在/var 目录下查找大文件 du -lh 发现只有300M 3、那就只能认为是 文件被删除但是 文件还被占用! 导致文件一直缓存在cac 阅读全文
posted @ 2021-05-13 10:02 codestacklinuxer 阅读(263) 评论(0) 推荐(0)
摘要:dropwatch的内核把kfree_skb分成二类: 人畜无害的调用consume_skb 需要丢包的调用kfree_skb perf record -g -a -e skb:kfree_skb 跟踪kfree_skb 就可以知道 丢包!! 内核通过kfree_skb释放skb,kfree_skb 阅读全文
posted @ 2021-05-12 11:04 codestacklinuxer 阅读(667) 评论(0) 推荐(0)
摘要:Message passing to invoke behavior in a program is a widely used technique in soft‐ware engineering. A program can modify another program’s behavior b 阅读全文
posted @ 2021-05-08 22:27 codestacklinuxer 阅读(517) 评论(0) 推荐(0)
摘要:先看看之前的sockmap sockmap_ebpf sock_map2 ipvs-ebpf EBPF:本质上它是一种内核代码注入的技术 内核中实现了一个cBPF/eBPF虚拟机 用户态可以用C来写运行的代码,再通过一个Clang&LLVM的编译器将C代码编译成BPF目标码 用户态通过系统调用bpf 阅读全文
posted @ 2021-05-05 22:24 codestacklinuxer 阅读(4037) 评论(0) 推荐(0)
摘要:https://ty-chen.github.io/linux-kernel-shm-semaphore/ Linux提供两种信号量: 内核信号量,由内核控制路径使用 用户态进程使用的信号量,这种信号量又分为POSIX信号量和SYSTEM V信号量。 对POSIX来说,信号量是个非负整数。 而SYS 阅读全文
posted @ 2021-04-23 11:12 codestacklinuxer 阅读(695) 评论(0) 推荐(0)
摘要:开始优化应用层!! 目前可以看出问题如下: select 耗时太多!!!! read 系统调用的errors次数占比13% 这是一个问题 read的次数太多,是不是可以调大接收缓存减少read 次数,同时使用zero_copy tcp : A reworked TCP zero-copy recei 阅读全文
posted @ 2021-04-17 15:53 codestacklinuxer 阅读(115) 评论(0) 推荐(0)
摘要:无聊中看了些开源代码,发现其中有个相同点就是: 简单就是美 数组 链表 解决了绝大部分事情 数据结构体注意cache对齐 整个业务就是状态图 一组对象/事件就是一组状态机 状态的迁移转换都是由于消息通告而触发的 每一个消息是可以debug可以记录的 完善的日志记录分层可debug 严谨的错误处理 考 阅读全文
posted @ 2021-04-10 13:04 codestacklinuxer 阅读(60) 评论(0) 推荐(0)
摘要:目前已经发现cps 打不上去,top中sys偏高, perf 以及strace 发现时accpet频繁的系统调用! 整体分析过程见:48核cps性能低于8核-debug cps 业务分析: 对于epoll的分析见之前文章:epoll 基本分析1 epoll基本分析2 惊群唤醒 结论: epoll E 阅读全文
posted @ 2021-04-08 20:23 codestacklinuxer 阅读(69) 评论(0) 推荐(0)
摘要:记得以前出现过一次类似问题: 这次check_list代码就顺便修改一下。 来看看man fopen的结果; a Open for appending (writing at end of file). The file is created if it does not exist. The st 阅读全文
posted @ 2021-04-06 22:53 codestacklinuxer 阅读(346) 评论(0) 推荐(0)
摘要:Google研究发现TCP三次握手是页面延迟时间的重要组成部分,所以他们提出了TFO:在TCP握手期间交换数据,这样可以减少一次RTT。根据测试数据,TFO可以减少15%的HTTP传输延迟,全页面的下载时间平均节省10%,最高可达40%.论文见:google_TFO_研究 用户向Server发送SY 阅读全文
posted @ 2021-04-01 19:06 codestacklinuxer 阅读(243) 评论(0) 推荐(0)
摘要:在经行性能测试时, 使用netstat -atn 查看socket 等状态时,总是卡主!!!! 有没有什么快速的办法呢? 通过proc 文件系统? strace netstat发现 也是通过read proc 文件系统 read write输出结果!!!但是 是通过遍历/proc下面每个PID目录 阅读全文
posted @ 2021-03-24 20:11 codestacklinuxer 阅读(237) 评论(0) 推荐(0)
摘要:目前在debug 的时候发现进程使用的fd 数目不够了!! 进程层面: 1.进程最多打开文件描述符数 由于目前进程已经在运行,是有ulimit 修改参数没用,目前可以通过/proc/$pid/limits来动态修改 /proc/$pid/limits 使用ulimit 命令查看 当前的限制以及使用r 阅读全文
posted @ 2021-03-23 18:15 codestacklinuxer 阅读(65) 评论(0) 推荐(0)
摘要:今天debug 应用层代码时, 发现一个宏 defined(__x86_64__) 对应x86_64 gcc 那么 arm -gcc 该使用什么宏表示呢? 使用google 搜索了一下可以用如下方式找出来: gcc -E -dM - </dev/null > filegcc 可以看到 gcc 中de 阅读全文
posted @ 2021-03-16 14:33 codestacklinuxer 阅读(354) 评论(0) 推荐(0)
摘要:目前部门网络组件bug 较多不稳定,准备自己改一改,所以现在想一想应该怎么处理!! 目前部门业务主要就是: 1、网络I/O >读取文件,频繁读取网络套接字。 2、CPU在内存中的计算 so:瓶颈应该是在网络I/O中,毕竟不是CPU密集型,所有的数据都在内存中处理 多线程??多进程 多线程:要防止频繁 阅读全文
posted @ 2021-03-12 12:16 codestacklinuxer 阅读(112) 评论(1) 推荐(0)