gpt4 book ai didi

Java Jetty 内存使用情况

转载 作者:行者123 更新时间:2023-12-01 05:13:24 24 4
gpt4 key购买 nike

我正在运行 Jetty Web 服务器,并使用它来执行一些 bash 脚本,具体取决于它通过 GET 接收到的参数。我从未使用过 Jetty,所以我拼凑了一些东西 from here让它发挥作用。我的问题是,当没有请求时,它的空闲内存约为 100mb,大约 12 小时后,它的空闲内存高达 1GB。如果请求合法,对于只运行 bash 脚本的东西来说,这似乎是一个可怕的事情。 Servlet 最终提供的平均文件大小约为 400kb。

服务器如何启动:

public void startServer() {

String hostname = "localhost";
int port = 7500;

Server server = new Server();

Connector connector = new SelectChannelConnector();
connector.setHost(hostname);
connector.setPort(port);

server.setConnectors(new Connector[]{connector});
server.setStopAtShutdown(true);

ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
context.addServlet(new ServletHolder(new DaemonServlet()), "/call/*");

HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { context });

server.setHandler(handlers);
server.start();
server.join();
}

Servlet(DaemonServlet):

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

String msg = "";

String call = request.getParameter("call");
ProcessBuilder pb = null;
Process p = null;

switch (call) {
case "sendAction": // Sends an action to a process with a certain ID
pb = new ProcessBuilder("/bin/bash", "/opt/test/process.sh", request.getParameter("process"), request.getParameter("action"));
break;
case "getFile": // Reads the file with the given ID into a string, to be returned by Jetty
pb = new ProcessBuilder("/bin/bash", "/opt/test/getFile.sh", request.getParameter("fileId"));
try {
p = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String scriptOutput = "";
String line;
while ((line = br.readLine()) != null) {
scriptOutput += line + '\n';
}
br.close();
msg = scriptOutput;
p.destroy();
p = null;
} catch (Exception e) {}
break;
}

response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println(msg);
}

这里是否有任何设置不正确的地方?

最佳答案

看起来像这样一行:

scriptOutput += line + '\n';

正在消耗大量内存。为什么不在收到信息后通过响应写回信息?

关于Java Jetty 内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11704433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com