mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-14 18:04:16 +00:00
Merge pull request #111 from overleaf/spd-native-mem-diags
Add diagnostics endpoint to debug native memory usage
This commit is contained in:
commit
de5903a6e9
4 changed files with 79 additions and 2 deletions
|
@ -7,7 +7,7 @@ runtime-conf:
|
|||
|
||||
|
||||
run: package runtime-conf
|
||||
java -jar \
|
||||
java $(GIT_BRIDGE_JVM_ARGS) -jar \
|
||||
target/writelatex-git-bridge-1.0-SNAPSHOT-jar-with-dependencies.jar \
|
||||
conf/runtime.json
|
||||
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
package uk.ac.ic.wlgitbridge.server;
|
||||
|
||||
import org.eclipse.jetty.server.HttpConnection;
|
||||
import org.eclipse.jetty.server.Request;
|
||||
import org.eclipse.jetty.server.handler.AbstractHandler;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import uk.ac.ic.wlgitbridge.bridge.Bridge;
|
||||
import uk.ac.ic.wlgitbridge.util.Log;
|
||||
|
||||
import javax.management.JMException;
|
||||
import javax.management.ObjectName;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.lang.management.ManagementFactory;
|
||||
|
||||
public class DiagnosticsHandler extends AbstractHandler {
|
||||
|
||||
public DiagnosticsHandler() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(
|
||||
String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response
|
||||
) throws IOException, ServletException {
|
||||
String method = baseRequest.getMethod();
|
||||
if (
|
||||
("GET".equals(method))
|
||||
&& target != null
|
||||
&& target.matches("^/diags/?$")
|
||||
) {
|
||||
baseRequest.setHandled(true);
|
||||
|
||||
Log.info(method + " <- /diags");
|
||||
|
||||
String detail;
|
||||
String summary;
|
||||
|
||||
try {
|
||||
detail = execute("vmNativeMemory", "detail");
|
||||
summary = execute("vmNativeMemory", "summary");
|
||||
} catch(JMException e) {
|
||||
Log.error("Failed to get native memory detail: " + e.getMessage());
|
||||
response.setStatus(500);
|
||||
return;
|
||||
}
|
||||
|
||||
response.setContentType("text/plain");
|
||||
response.setStatus(200);
|
||||
|
||||
response.getWriter().write(summary);
|
||||
response.getWriter().write("\n----------\n\n");
|
||||
response.getWriter().write(detail);
|
||||
response.getWriter().flush();
|
||||
}
|
||||
}
|
||||
|
||||
public static String execute(String command, String... args) throws JMException {
|
||||
return (String) ManagementFactory.getPlatformMBeanServer().invoke(
|
||||
new ObjectName("com.sun.management:type=DiagnosticCommand"),
|
||||
command,
|
||||
new Object[]{args},
|
||||
new String[]{"[Ljava.lang.String;"});
|
||||
}
|
||||
}
|
|
@ -128,6 +128,7 @@ public class GitBridgeServer {
|
|||
handlers.addHandler(new HealthCheckHandler(bridge));
|
||||
handlers.addHandler(new GitLfsHandler(bridge));
|
||||
handlers.addHandler(new PrometheusHandler());
|
||||
handlers.addHandler(new DiagnosticsHandler());
|
||||
base.setHandler(handlers);
|
||||
return base;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
#!/bin/bash
|
||||
/opt/envsubst < /envsubst_template.json > /conf/runtime.json
|
||||
exec java -XX:+UseContainerSupport -XX:MaxRAMPercentage=50.0 -Xlog:gc* -jar /git-bridge.jar /conf/runtime.json
|
||||
|
||||
if [ "x$GIT_BRIDGE_JVM_ARGS" == "x" ]; then
|
||||
GIT_BRIDGE_JVM_ARGS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=50.0"
|
||||
fi
|
||||
|
||||
exec java $GIT_BRIDGE_JVM_ARGS -jar /git-bridge.jar /conf/runtime.json
|
||||
|
|
Loading…
Add table
Reference in a new issue