В общем, путем долгих тестов и экспериментов причину удалось понять.
Во всем виноват multi-threading, непонятно по каким причинам подвисали эти треды, и вешали целый процесс, не освобождая при этом память. Тем паче, что скрипт мой работает с сокетами, тут ух синхронности потоков никак не достичь, стопудняк возникал дедлок или еще какие прочие радости.
Варианты решения - отключаем на апаче режим worker (когда на один child запускается несколько потоков) и используем режим prefork (один процесс - один поток). И теперь поддержка threads ни на php, ни на mod_perl не нужна (перл кстати тоже не выдержал испытания
).
Что меня удивило - казалось бы, однопоточный режим должен быть тормознее, ан нет! Процессор грузится вдвое меньше в режиме prefork, память освобождается, когда апач киляет child, все тип-топ.
Так и оставим.
P.S. Еще остался для тестов режим fastcgi для исполнения перловых скриптов, тогда он не покатил из-за того, что апаче вообще умирал напрочь, наверное, тоже из-за deadlock'а в потоках, посмотримс, но это позже.