Browse Source

Add MaxRAMPercentage and clojure.compiler.direct-linking flags to clojure runs (#10349)

Co-authored-by: jj <[email protected]>
ruroru 2 weeks ago
parent
commit
6e33f8e566
30 changed files with 65 additions and 62 deletions
  1. 1 1
      frameworks/Clojure/aleph/aleph.dockerfile
  2. 10 2
      frameworks/Clojure/aleph/src/hello/handler.clj
  3. 1 1
      frameworks/Clojure/compojure/compojure-raw.dockerfile
  4. 1 1
      frameworks/Clojure/compojure/compojure.dockerfile
  5. 1 1
      frameworks/Clojure/http-kit/http-kit-raw.dockerfile
  6. 1 1
      frameworks/Clojure/http-kit/http-kit.dockerfile
  7. 1 1
      frameworks/Clojure/kit/deps.edn
  8. 1 1
      frameworks/Clojure/kit/kit-hiccup.dockerfile
  9. 1 1
      frameworks/Clojure/kit/kit-majavat.dockerfile
  10. 1 1
      frameworks/Clojure/kit/kit.dockerfile
  11. 1 1
      frameworks/Clojure/luminus/luminus.dockerfile
  12. 1 1
      frameworks/Clojure/pedestal/pedestal.dockerfile
  13. 2 0
      frameworks/Clojure/reitit/benchmark_config.json
  14. 1 1
      frameworks/Clojure/reitit/reitit-jdbc.dockerfile
  15. 1 1
      frameworks/Clojure/reitit/reitit.dockerfile
  16. 2 2
      frameworks/Clojure/ring-http-exchange/project.clj
  17. 1 1
      frameworks/Clojure/ring-http-exchange/ring-http-exchange-graalvm.dockerfile
  18. 1 1
      frameworks/Clojure/ring-http-exchange/ring-http-exchange-robaho-graalvm.dockerfile
  19. 1 1
      frameworks/Clojure/ring-http-exchange/ring-http-exchange-robaho-semeru.dockerfile
  20. 1 1
      frameworks/Clojure/ring-http-exchange/ring-http-exchange-robaho.dockerfile
  21. 1 1
      frameworks/Clojure/ring-http-exchange/ring-http-exchange.dockerfile
  22. 21 28
      frameworks/Clojure/ring-http-exchange/src/ring_http_exchange/benchmark.clj
  23. 1 1
      frameworks/Java/httpserver/httpserver-graalvm.dockerfile
  24. 1 1
      frameworks/Java/httpserver/httpserver-postgres.dockerfile
  25. 1 1
      frameworks/Java/httpserver/httpserver-robaho-graalvm.dockerfile
  26. 1 1
      frameworks/Java/httpserver/httpserver-robaho-postgres.dockerfile
  27. 1 1
      frameworks/Java/httpserver/httpserver-robaho.dockerfile
  28. 1 1
      frameworks/Java/httpserver/httpserver.dockerfile
  29. 1 1
      frameworks/Java/httpserver/pom.xml
  30. 5 5
      frameworks/Java/httpserver/src/main/java/benchmarks/Server.java

+ 1 - 1
frameworks/Clojure/aleph/aleph.dockerfile

@@ -11,4 +11,4 @@ COPY --from=lein /aleph/target/hello-aleph-standalone.jar app.jar
 
 EXPOSE 8080
 
-CMD ["java", "-server", "--enable-native-access=ALL-UNNAMED", "-XX:+UseParallelGC", "-jar", "app.jar"]
+CMD ["java", "-server", "--enable-native-access=ALL-UNNAMED", "-XX:+UseParallelGC", "-XX:MaxRAMPercentage=70", "-Dclojure.compiler.direct-linking=true","-jar", "app.jar"]

+ 10 - 2
frameworks/Clojure/aleph/src/hello/handler.clj

@@ -19,7 +19,15 @@
 (def jdbc-opts {:builder-fn rs/as-unqualified-maps})
 
 (def db-spec
-  {:jdbcUrl "jdbc:postgresql://tfb-database/hello_world?user=benchmarkdbuser&password=benchmarkdbpass"})
+  {:auto-commit        false
+   :connection-timeout 1000
+   :validation-timeout 1000
+   :idle-timeout       15000
+   :max-lifetime       60000
+   :minimum-idle       0
+   :maximum-pool-size  128
+   :register-mbeans    false
+   :jdbcUrl            "jdbc:postgresql://tfb-database/hello_world?user=benchmarkdbuser&password=benchmarkdbpass"})
 
 (def datasource
   (connection/->pool HikariDataSource db-spec))
@@ -62,7 +70,7 @@
                      jdbc-opts))
 
 (defn- update-world
-  [{:keys [randomnumber  id]}]
+  [{:keys [randomnumber id]}]
   (jdbc/execute-one! datasource
                      ["update \"World\" set randomNumber = ? where id = ? returning *;" randomnumber id]
                      jdbc-opts))

+ 1 - 1
frameworks/Clojure/compojure/compojure-raw.dockerfile

@@ -13,4 +13,4 @@ COPY resin.xml conf/resin.xml
 
 EXPOSE 8080
 
-CMD ["java", "-jar", "lib/resin.jar", "console"]
+CMD ["java", "-XX:MaxRAMPercentage=70", "-Dclojure.compiler.direct-linking=true", "-jar", "lib/resin.jar", "console"]

+ 1 - 1
frameworks/Clojure/compojure/compojure.dockerfile

@@ -13,4 +13,4 @@ COPY resin.xml conf/resin.xml
 
 EXPOSE 8080
 
-CMD ["java", "-jar", "lib/resin.jar", "console"]
+CMD ["java", "-XX:MaxRAMPercentage=70", "-Dclojure.compiler.direct-linking=true","-jar", "lib/resin.jar", "console"]

+ 1 - 1
frameworks/Clojure/http-kit/http-kit-raw.dockerfile

@@ -7,4 +7,4 @@ RUN lein uberjar
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-jar", "target/http-kit-standalone.jar"]
+CMD ["java", "-server", "-Dclojure.compiler.direct-linking=true", "-jar", "target/http-kit-standalone.jar"]

+ 1 - 1
frameworks/Clojure/http-kit/http-kit.dockerfile

@@ -7,4 +7,4 @@ RUN lein uberjar
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-jar", "target/http-kit-standalone.jar"]
+CMD ["java", "-server", "-Dclojure.compiler.direct-linking=true", "-jar", "target/http-kit-standalone.jar"]

+ 1 - 1
frameworks/Clojure/kit/deps.edn

@@ -15,7 +15,7 @@
 
            ;; HTML templating
            selmer/selmer                    {:mvn/version "1.12.62"}
-           org.clojars.jj/majavat           {:mvn/version "1.12.3"}
+           org.clojars.jj/majavat           {:mvn/version "1.13.0"}
            hiccup/hiccup                    {:mvn/version "2.0.0"}
 
            ;; Database

+ 1 - 1
frameworks/Clojure/kit/kit-hiccup.dockerfile

@@ -13,7 +13,7 @@ COPY --from=build /target/te-bench-standalone.jar /te-bench/te-bench-standalone.
 EXPOSE 8080
 
 ENV PORT=8080
-ENV JAVA_OPTS="-XX:+UseContainerSupport -Dfile.encoding=UTF-8"
+ENV JAVA_OPTS="-XX:+UseContainerSupport -Dfile.encoding=UTF-8 -XX:MaxRAMPercentage=70  -Dclojure.compiler.direct-linking=true"
 ENV JDBC_URL="jdbc:postgresql://tfb-database/hello_world?user=benchmarkdbuser&password=benchmarkdbpass"
 
 ENTRYPOINT exec java $JAVA_OPTS -jar /te-bench/te-bench-standalone.jar

+ 1 - 1
frameworks/Clojure/kit/kit-majavat.dockerfile

@@ -13,7 +13,7 @@ COPY --from=build /target/te-bench-standalone.jar /te-bench/te-bench-standalone.
 EXPOSE 8080
 
 ENV PORT=8080
-ENV JAVA_OPTS="-XX:+UseContainerSupport -Dfile.encoding=UTF-8"
+ENV JAVA_OPTS="-XX:+UseContainerSupport -Dfile.encoding=UTF-8  -XX:MaxRAMPercentage=70  -Dclojure.compiler.direct-linking=true"
 ENV JDBC_URL="jdbc:postgresql://tfb-database/hello_world?user=benchmarkdbuser&password=benchmarkdbpass"
 
 ENTRYPOINT exec java $JAVA_OPTS -jar /te-bench/te-bench-standalone.jar

+ 1 - 1
frameworks/Clojure/kit/kit.dockerfile

@@ -13,7 +13,7 @@ COPY --from=build /target/te-bench-standalone.jar /te-bench/te-bench-standalone.
 EXPOSE 8080
 
 ENV PORT=8080
-ENV JAVA_OPTS="-XX:+UseContainerSupport -Dfile.encoding=UTF-8"
+ENV JAVA_OPTS="-XX:+UseContainerSupport -Dfile.encoding=UTF-8  -XX:MaxRAMPercentage=70  -Dclojure.compiler.direct-linking=true"
 ENV JDBC_URL="jdbc:postgresql://tfb-database/hello_world?user=benchmarkdbuser&password=benchmarkdbpass"
 
 ENTRYPOINT exec java $JAVA_OPTS -jar /te-bench/te-bench-standalone.jar

+ 1 - 1
frameworks/Clojure/luminus/luminus.dockerfile

@@ -12,4 +12,4 @@ COPY --from=lein /luminus/target/hello.jar app.jar
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseParallelGC", "-jar", "app.jar"]
+CMD ["java", "-server", "-XX:+UseParallelGC", "-XX:MaxRAMPercentage=70", "-Dclojure.compiler.direct-linking=true", "-jar", "app.jar"]

+ 1 - 1
frameworks/Clojure/pedestal/pedestal.dockerfile

@@ -8,4 +8,4 @@ RUN lein uberjar
 
 EXPOSE 8080
 
-CMD ["java", "-jar", "-Dio.pedestal.log.defaultMetricsRecorder=nil", "-Dio.pedestal.log.overrideLogger=nil", "target/pedestal-standalone.jar"]
+CMD ["java", "-Dclojure.compiler.direct-linking=true", "-jar", "-Dio.pedestal.log.defaultMetricsRecorder=nil", "-Dio.pedestal.log.overrideLogger=nil", "target/pedestal-standalone.jar"]

+ 2 - 0
frameworks/Clojure/reitit/benchmark_config.json

@@ -39,6 +39,8 @@
       "versus": ""
     },
     "async": {
+      "json_url": "/json",
+      "plaintext_url": "/plaintext",
       "db_url": "/db",
       "port": 8080,
       "approach": "Realistic",

+ 1 - 1
frameworks/Clojure/reitit/reitit-jdbc.dockerfile

@@ -10,4 +10,4 @@ COPY --from=lein /reitit/target/hello-reitit-standalone.jar app.jar
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseParallelGC", "-jar", "app.jar", "sync"]
+CMD ["java", "-server", "-XX:+UseParallelGC", "-XX:MaxRAMPercentage=70", "-Dclojure.compiler.direct-linking=true", "-jar", "app.jar", "sync"]

+ 1 - 1
frameworks/Clojure/reitit/reitit.dockerfile

@@ -10,4 +10,4 @@ COPY --from=lein /reitit/target/hello-reitit-standalone.jar app.jar
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseParallelGC", "-jar", "app.jar"]
+CMD ["java", "-server", "-XX:+UseParallelGC", "-XX:MaxRAMPercentage=70", "-Dclojure.compiler.direct-linking=true", "-jar", "app.jar"]

+ 2 - 2
frameworks/Clojure/ring-http-exchange/project.clj

@@ -6,9 +6,9 @@
 
   :dependencies [[org.clojure/clojure "1.12.3"]
                  [org.clojure/tools.logging "1.3.0"]
-                 [org.clojars.jj/ring-http-exchange "1.2.4"]
+                 [org.clojars.jj/ring-http-exchange "1.2.9"]
                  [seancorfield/next.jdbc "1.2.659"]
-                 [org.clojars.jj/majavat "1.12.3"]
+                 [org.clojars.jj/majavat "1.13.0"]
                  [hikari-cp "3.3.0"]
                  [org.clojars.jj/boa-sql "1.0.0"]
                  [org.postgresql/postgresql "42.7.8"]

+ 1 - 1
frameworks/Clojure/ring-http-exchange/ring-http-exchange-graalvm.dockerfile

@@ -11,4 +11,4 @@ COPY --from=lein /ring-http-exchange/target/ring-http-server-1.0.0-standalone.ja
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseParallelGC", "-jar", "app.jar"]
+CMD ["java", "-server", "-XX:+UseZGC", "-XX:MaxRAMPercentage=70", "-Dclojure.compiler.direct-linking=true", "-jar", "app.jar"]

+ 1 - 1
frameworks/Clojure/ring-http-exchange/ring-http-exchange-robaho-graalvm.dockerfile

@@ -11,4 +11,4 @@ COPY --from=lein /ring-http-exchange/target/ring-http-server-1.0.0-standalone.ja
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseParallelGC", "-jar", "app.jar"]
+CMD ["java", "-server", "-XX:+UseZGC", "-XX:MaxRAMPercentage=70", "-Dclojure.compiler.direct-linking=true", "-jar", "app.jar"]

+ 1 - 1
frameworks/Clojure/ring-http-exchange/ring-http-exchange-robaho-semeru.dockerfile

@@ -11,4 +11,4 @@ COPY --from=lein /ring-http-exchange/target/ring-http-server-1.0.0-standalone.ja
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseParallelGC", "-jar", "app.jar"]
+CMD ["java", "-Xtune:throughput", "-Xgcpolicy:optthruput", "-XX:MaxRAMPercentage=70", "-XX:+UseContainerSupport", "-Dclojure.compiler.direct-linking=true", "-jar", "app.jar"]

+ 1 - 1
frameworks/Clojure/ring-http-exchange/ring-http-exchange-robaho.dockerfile

@@ -11,4 +11,4 @@ COPY --from=lein /ring-http-exchange/target/ring-http-server-1.0.0-standalone.ja
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseParallelGC", "-jar", "app.jar"]
+CMD ["java", "-server", "-XX:+UseZGC", "-XX:MaxRAMPercentage=70", "-Dclojure.compiler.direct-linking=true", "-jar", "app.jar"]

+ 1 - 1
frameworks/Clojure/ring-http-exchange/ring-http-exchange.dockerfile

@@ -11,4 +11,4 @@ COPY --from=lein /ring-http-exchange/target/ring-http-server-1.0.0-standalone.ja
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseParallelGC", "-jar", "app.jar"]
+CMD ["java", "-server", "-XX:+UseZGC", "-XX:MaxRAMPercentage=70", "-Dclojure.compiler.direct-linking=true", "-jar", "app.jar"]

+ 21 - 28
frameworks/Clojure/ring-http-exchange/src/ring_http_exchange/benchmark.clj

@@ -12,36 +12,35 @@
     (com.zaxxer.hikari HikariDataSource)
     (java.util.concurrent Executors)))
 
+(defrecord Response [body status headers])
+
 (def query-fortunes (boa/execute (boa/->NextJdbcAdapter) "fortune.sql"))
 
 (def db-spec {:auto-commit        false
-              :connection-timeout 3000
+              :connection-timeout 1000
               :validation-timeout 1000
-              :idle-timeout       300000
-              :max-lifetime       1800000
-              :minimum-idle       128
-              :maximum-pool-size  1024
+              :idle-timeout       15000
+              :max-lifetime       60000
+              :minimum-idle       0
+              :maximum-pool-size  128
               :register-mbeans    false
-              :jdbcUrl            "jdbc:postgresql://tfb-database/hello_world?user=benchmarkdbuser&password=benchmarkdbpass&prepareThreshold=1"})
+              :jdbcUrl            "jdbc:postgresql://tfb-database/hello_world?user=benchmarkdbuser&password=benchmarkdbpass&prepareThreshold=1"}
+  )
 
+(def ^:private ^:const hello-world "Hello, World!")
 (def ^:private ^:const additional-message {:id      0
                                            :message "Additional fortune added at request time."})
 (def ^:private ^:const fortune-headers {"Server"       "ring-http-exchange"
                                         "Content-Type" "text/html; charset=UTF-8"})
 (def ^:private ^:const json-headers {"Server"       "ring-http-exchange"
                                      "Content-Type" "application/json"})
+(def ^:private ^:const plain-text-headers {"Server"       "ring-http-exchange"
+                                           "Content-Type" "text/plain"})
 
 (def ^:private render-fortune (majavat/build-renderer "fortune.html"
                                                       {:renderer (->StringRenderer
                                                                    {:sanitizer (->Html)})}))
 
-
-(defn- plaintext-response []
-  {:status  200
-   :headers {"Server"       "ring-http-exchange"
-             "Content-Type" "text/plain"}
-   :body    "Hello, World!"})
-
 (defn- get-body [datasource]
   (let [context (as-> (query-fortunes datasource) fortunes
                       (conj fortunes additional-message)
@@ -50,23 +49,17 @@
 
 (defn -main
   [& _]
-  (System/setProperty "jdk.virtualThreadScheduler.parallelism" 
-                    (str (* 4 (.availableProcessors (Runtime/getRuntime)))))
-
   (println "Starting server on port 8080")
   (let [datasource (connection/->pool HikariDataSource db-spec)]
     (server/run-http-server
       (fn [req]
         (case (req :uri)
-          "/plaintext" (plaintext-response)
-          "/json" {:status  200
-                   :headers json-headers
-                   :body    (json/write-value-as-bytes {:message "Hello, World!"})}
-          "/fortunes" (let [body (get-body datasource)]
-                        {:status  200
-                         :headers fortune-headers
-                         :body    body})
-          (plaintext-response)))
-      {:port     8080
-       :host     "0.0.0.0"
-       :executor (Executors/newVirtualThreadPerTaskExecutor)})))
+          "/plaintext" (Response. hello-world 200 plain-text-headers)
+          "/json" (Response. (json/write-value-as-string {:message hello-world}) 200 json-headers)
+          "/fortunes" (let [body (get-body datasource)] (Response. body 200 fortune-headers))
+          (Response. hello-world 200 {"Server"       "ring-http-exchange"
+                                      "Content-Type" "text/plain"})))
+      {:port            8080
+       :host            "0.0.0.0"
+       :record-support? true
+       :executor        (Executors/newVirtualThreadPerTaskExecutor)})))

+ 1 - 1
frameworks/Java/httpserver/httpserver-graalvm.dockerfile

@@ -10,4 +10,4 @@ COPY --from=maven /httpserver/target/httpserver-1.0-jar-with-dependencies.jar ap
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-jar", "app.jar"]
+CMD ["java", "-server", "-XX:MaxRAMPercentage=70", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-jar", "app.jar"]

+ 1 - 1
frameworks/Java/httpserver/httpserver-postgres.dockerfile

@@ -10,4 +10,4 @@ COPY --from=maven /httpserver/target/httpserver-1.0-jar-with-dependencies.jar ap
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-jar", "app.jar", "postgres"]
+CMD ["java", "-server", "-XX:MaxRAMPercentage=70", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-jar", "app.jar", "postgres"]

+ 1 - 1
frameworks/Java/httpserver/httpserver-robaho-graalvm.dockerfile

@@ -10,4 +10,4 @@ COPY --from=maven /httpserver-robaho/target/httpserver-1.0-jar-with-dependencies
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-jar", "app.jar"]
+CMD ["java", "-server", "-XX:MaxRAMPercentage=70", "-jar", "app.jar"]

+ 1 - 1
frameworks/Java/httpserver/httpserver-robaho-postgres.dockerfile

@@ -10,4 +10,4 @@ COPY --from=maven /httpserver-robaho/target/httpserver-1.0-jar-with-dependencies
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-jar", "app.jar", "postgres"]
+CMD ["java", "-server", "-XX:MaxRAMPercentage=70", "-jar", "app.jar", "postgres"]

+ 1 - 1
frameworks/Java/httpserver/httpserver-robaho.dockerfile

@@ -10,4 +10,4 @@ COPY --from=maven /httpserver-robaho/target/httpserver-1.0-jar-with-dependencies
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-jar", "app.jar"]
+CMD ["java", "-server", "-XX:MaxRAMPercentage=70", "-jar", "app.jar"]

+ 1 - 1
frameworks/Java/httpserver/httpserver.dockerfile

@@ -10,4 +10,4 @@ COPY --from=maven /httpserver/target/httpserver-1.0-jar-with-dependencies.jar ap
 
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-jar", "app.jar"]
+CMD ["java", "-server", "-XX:MaxRAMPercentage=70", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-jar", "app.jar"]

+ 1 - 1
frameworks/Java/httpserver/pom.xml

@@ -68,7 +68,7 @@
                 <inherited>true</inherited>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.0</version>
+                <version>3.14.1</version>
                 <configuration>
                     <debug>false</debug>
                     <source>21</source>

+ 5 - 5
frameworks/Java/httpserver/src/main/java/benchmarks/Server.java

@@ -51,7 +51,7 @@ public class Server {
         return fortunes;
     }
 
-    private static DataSource createPostgresDataSource() throws ClassNotFoundException {
+    private static DataSource createPostgresDataSource() {
         HikariConfig config = new HikariConfig();
 
         config.setJdbcUrl("jdbc:postgresql://tfb-database:5432/hello_world");
@@ -59,11 +59,11 @@ public class Server {
         config.setPassword("benchmarkdbpass");
 
         config.setMaximumPoolSize(64);
-        config.setMinimumIdle(16);
+        config.setMinimumIdle(0);
 
-        config.setConnectionTimeout(10000);
-        config.setIdleTimeout(600000);
-        config.setMaxLifetime(1800000);
+        config.setConnectionTimeout(1000);
+        config.setIdleTimeout(15000);
+        config.setMaxLifetime(60000);
 
         config.setAutoCommit(true);