我有守护程序和perl上的子项。为了守护进程我使用Proc::Daemon
。控制守护进程和连接到DB的子进程(DBI
lib),孩子们也通过imap(Mail::IMAPClient
库)收集邮件。 I undef
儿童代码中的所有变量,但随着时间的推移,比任何人工作都更多的孩子会消耗大量内存。 ps
输出:如何在Perl中释放内存
user 16521 0.6 1.6 135560 16516 ? S 10:47 0:54 perl remote_imap.pl
user 16523 0.2 20.0 331976 201764 ? S 10:47 0:21 perl remote_imapd.pl 16521
user 16525 0.1 3.0 157792 30720 ? S 10:47 0:09 perl remote_imapd.pl 16521
user 16527 0.1 3.0 157796 30704 ? S 10:47 0:08 perl remote_imapd.pl 16521
user 16529 0.1 3.0 157796 30572 ? S 10:47 0:09 perl remote_imapd.pl 16521
user 16531 0.1 3.0 157792 30612 ? S 10:47 0:08 perl remote_imapd.pl 16521
睡眠我使用usleep
从Time::HiRes
库。在remote_imap.pl usleep(100000)
,在remote_imapd.pl
- usleep(500000)
。
为什么不释放内存,因为我为所有变量(除了id_connet到DB)做了andef
?如果你想,我会添加代码。
主要守护 remote_imap.pl 儿童 remote_imapd.pl
添加*最小*代码足以重现问题。 – 2014-12-19 11:29:57
Yup需要看到代码才能理解首先分配内存的位置。 – 2014-12-19 11:30:51
我添加超链接 – user3751471 2014-12-19 11:37:36