Eric Wong <[email protected]> wrote:
> Eric Wong <[email protected]> wrote:
> > For long-lived daemons, perform immortal allocations as early as
> > possible to reduce the likelyhood of heap fragmentation due to
> > mixed-lifetime allocations happening once the process is fully
> > loaded and serving requests, since per-request allocations
> > should all be short-lived.
>
> Encode also loads lazily...
-----------8<---------
Subject: [PATCH] www: preload: load all encodings at startup
Encode lazy-loads encodings on an as-needed basis. This is
great for short-lived programs, but leads to fragmentation in
long-lived daemons where immortal allocations can get
interleaved with short-lived, per-request allocations.
Since we have no idea which encodings will be needed when
there's a constant flow of incoming mail, just preload
everything available at startup.
---
lib/PublicInbox/WWW.pm | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index 275e509f..3a428218 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -141,6 +141,12 @@ sub call {
# fragmentation since common allocators favor a large contiguous heap.
sub preload {
my ($self) = @_;
+
+ # populate caches used by Encode internally, since emails
+ # may show up with any encoding.
+ require Encode;
+ Encode::find_encoding($_) for Encode->encodings(':all');
+
require PublicInbox::ExtMsg;
require PublicInbox::Feed;
require PublicInbox::View;
--
unsubscribe: one-click, see List-Unsubscribe header
archive: https://public-inbox.org/meta/