我有一个 Catalyst Web 服务器。我可以看到每个子服务器进程都单独加载很多相同的 .so 文件,这占用了大量内存。
是否有可能 Catalyst 为所有子进程预加载所有 .so 文件一次?
最佳答案
您所描述的具体行为是 mod_perl 的一项功能而不是催化剂本身。但是您当然可以在 mod_perl 环境下运行 Catalyst 应用程序。
在 mod_perl 下,只能加载共享库文件一次,并且不可能有不同的版本。除了节省多个子进程的加载之外,这实际上可以在同一服务器上的不同应用程序上运行。因此,使用 mod_perl 解释器的两个不同的 Web 应用程序实际上会共享它们都使用的库的已加载实例。
因此,大多数人通常不喜欢使用 mod_perl 作为为其应用程序提供服务的方式,因为他们实际上希望为每个应用程序维护不同的库版本。由于上述原因,在此环境中这是不可能的。
但是,如果您认为这适合您的需求,那么 mod_perl 可能就是适合您的环境。
Catalyst 对 mod_perl 的支持略有变化。通常首选的方法是使用Plack::Handler将 Catalyst 作为 PSGI 应用程序引导到 mod_perl 环境的方法。关于配置还有一些附加说明here .
关于Perl Catalyst : possibility to share . 子服务器进程之间的 so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22851585/