我今天正在对一组程序进行压力测试。我大幅增加了程序的输入负载,它一开始就工作了,但我有明显的内存泄漏,吸收了内存。唯一的问题是 1)Valgrind
坚持我没有任何泄漏,2)它只会发生高数据包摄取率。
一个可能很疯狂的想法是,由于我的系统缺乏带宽来以数据包传入的速度输出数据包,因此额外的内存可能会流向消息队列,从而迫使传输越来越大的数据缓冲区。显示占用内存的程序正在从 TCP 套接字读取数据并写入命名管道。所以我有三个问题。
对于 TCP/IP 或命名管道,用于存储要分派的数据的内存队列是否可以无限期地增加?
如果队列可以并且确实增长,它是否仍会显示我的程序(从 TCP 读取并输出到命名管道的程序)是内存占用者,或者内存只会显示为系统内存?
有没有一个命令可以用来检查分配给这些队列的内存?我正在运行 Centos
诚然,我真的不认为这是我泄漏的原因,但话又说回来,我真的无法猜测还有什么,所以我不得不问!
我有一个同时充当测试和演示平台的系统。我正在记录我的系统输出的大量数据,在部署时我不会记录这些数据,因此我的日志文件会很快填满,最终我的硬盘驱动器上的分区空间用完了。
我试过了logrotate
,但它似乎只有在我的程序没有运行时才有效。当程序关闭时,它会正确截断文件,记录压缩版本,并丢弃其余部分。但是,当我填充日志文件的程序启动并运行时,它将正确创建压缩文件,但不会截断活动文件。我想弄清楚如何使它截断。
我正在通过简单的重定向写入日志文件。 ProgramA>logA
,programB>logB
等我的编程'的输出每次我收到的输入向量,所以它的输出非常迅速。我的假设是 logrotate 由于对该字段的不断写入而未能截断,但有人可以确认这是原因吗?
无论如何,logrotate 在哪里保存它的错误文件?
另外:我想修改 logrotate 的行为。如果它激活并看到一个大的,比如 100 MB 的日志文件,我希望它在截断原始日志文件之前只创建文件最后 1 MB 的副本(丢弃文件中较旧的 99 MB 内容)。我需要保留最近的数据,但我不太关心任何很旧的东西。谁能告诉我如何做到这一点?