Details
-
Epic
-
Status: Closed
-
Major
-
Resolution: Duplicate
-
None
-
None
-
None
-
Improve Performance of File Serving in PuppetServer
-
Platform Core
-
Done
-
Major
-
5 - >90% of Customers
-
3 - Serious
-
3 - $$$$
-
Description
The Problem
Tuning the number of JRubies required for PuppetServer is very difficult because serving files require borrowing a JRuby but adding extra JRubies to handle serving more files requires more heap and puppet code will be loaded into those JRubies.
As a result you need more heap and you get more garbage created and collected because there is no way to separate the resources for file serving and catalog compilation.
Also generally speaking, the current file serving implementation is not optimal because files are loaded into memory and then served
In Scope
1. Investigate which file serving functions would yield the most benefit from being in pure clojure instead of delegating to puppet / jruby
-
- starting point is pluginsync
- then files resources with a source attribute not stored in a module that is file synced
2. Rewrite the file serving for these endpoints in Clojure so they do not require borrowing a jruby
Possible Benefits
Either solution will lower heap requirements and improve the stability of Puppet Server by segregating the resource needs.
For small installs of PE we'll be able to more effectively run with lower resources.
For large installs of PE we'll be able to drastically lower the heap requirements.
Improve file serving from its current implementation to a more generic file-server like approach, hopefully reducing/removing the need to load full files into memory as opposed to streaming them off disk
Attachments
Issue Links
- is duplicated by
-
SERVER-2026 Serve Files from Clojure
-
- Closed
-
- relates to
-
SERVER-1789 Characterize JRuby performance problems
-
- Closed
-
-
SERVER-1868 Investigate sharing environment cache across JRubies
-
- Closed
-
-
SERVER-1975 HTTP metrics for the /puppet API should only measure time spent in the JRuby handler
-
- Resolved
-