我正在用 Perl 为时事通讯编写一个守护进程。
守护进程将在服务器上 24/7 运行。它几乎始终与 postgresql 数据库保持活动连接。
我对 Perl 没有太多经验,所以如果你们中的一些人可以分享以下信息,我会很高兴:
如何限制内存。我不想离开公羊。正如我所说,这个程序将作为守护进程一直运行而不会被停止。
编写此类守护进程时应该注意什么?
就 SQL 连接而言 - 确保不会泄漏内存。从查询中检索所需的最少量数据,并确保存储数据的数据结构立即超出范围,以便垃圾收集器可以回收它们
请注意,可能存在您无法控制的内存泄漏(例如在 Postgresql 连接代码中)。众所周知它会发生。解决这个问题的最佳解决方案(除了进行精确的内存分析和修复底层库中的泄漏)是让你的守护进程拉出一个 Phoenix - 停止做它正在做的事情并
exec()
自己的新副本。
就编写 Perl 守护进程而言,一些资源:
Proc::Daemon
- 将 Perl 程序作为守护进程运行。关于 #1:Perl 是垃圾收集的。
其有效含义是,您应该确保在使用完数据后清除所有对数据的引用,从而允许垃圾收集器运行。
http://perldoc.perl.org/perlobj.html#Two-Phased-Garbage-Collection
需要注意的一件事是内存泄漏。 SO 上已经有一个关于 Perl 中内存泄漏的非常很好的线程。