美文网首页
linux 管道溢出问题分析

linux 管道溢出问题分析

作者: e0ba4d164eac | 来源:发表于2018-05-18 15:40 被阅读0次

由于项目中的线程间通讯使用到libuv中的pipe,由于libuv的高性能异步结构,数据传输速度很快。为了方便数据解析试用了结构体,比如:

typedef struct A{  

  a[1024*10];  

};  

可以看到一个数据包有10kb,在系统中查看系统管道大小:

pipe_buf 大小:512*8 = 4kb,那岂不是一个包就溢出了,然而还有一个pipe最大容量,man 7 pipe 查看:

最大容量是 65536 bytes = 64kb

接下来,如果pipe write线程的写的比较快,或者pipe read线程由于某个处理耗时长,导致管道里有6个数据包没有取出,再往里写就会提示resource temporarilly unvailable,甚至出现段错误。

这个问题解决也容易,pipe wirte 速度 < pipe read速度即可,这样就不会溢出了,pipe read 的优化也很重要。

相关文章

  • linux 管道溢出问题分析

    由于项目中的线程间通讯使用到libuv中的pipe,由于libuv的高性能异步结构,数据传输速度很快。为了方便数据...

  • 2019-06-18 unlink源码解释

    Linux中的un 在此输入正文link glibc2.27中的unlink源码分析 堆溢出漏洞利用,过检测方式的...

  • Linux进程间通信

    Linux进程间通信的概念 linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named p...

  • Hibernate 懒加载机制 PO对象 转 JSON 内存溢出

    问题描述 内存溢出 OutOfMemory:heap space 排查分析 1.打印dumpjmap -dump:...

  • fifo()函数

    linux系统编程之管道(三):命名管道FIFO和mkfifo函数 - Meditation - 博...

  • linux 管道

    符号表示 |和管道特别形象。 作用 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序...

  • 管道命令

    参考linux shell 管道命令(pipe)使用及与shell重定向区别、管道命令 管道命令操作符是:”|”,...

  • Linux 进程之间的通信方式

    linux使用的进程间通信方式 管道(pipe)、流管道(s_pipe)、无名管道(FIFO)、 套接字 sock...

  • Linux进程间通信 -- 匿名管道和FIFO

    Linux进程间通信 -- 匿名管道和FIFO 匿名管道 管道包括三种: 匿名管道pipe. 特点:一是单工(单项...

  • Linux进程间通信(Interprocess Communic

    linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘...

网友评论

      本文标题:linux 管道溢出问题分析

      本文链接:https://www.haomeiwen.com/subject/acvgdftx.html