0
저는이 문제에 대한 해결책을 찾기 위해 모든 곳에서 수색했습니다. 이제 정말 문제인지 궁금해지기 시작했습니다.Log4j2 메모리 누수
log4j2
을 내 응용 프로그램에 로거로 소개하고 있는데, 그렇게 할 때 Tomcat 서버 8.5.24를 다시로드, 배포 취소 또는 중지 할 때 메모리 누수가 남았습니다. 코드로 pom.xml
에서
내 의존성 :
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
</dependency>
내
WebServlet
:
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "Servlet", urlPatterns = {"/servlet"}, loadOnStartup = 1)
public class Servlet extends HttpServlet {
private final Logger logger = LogManager.getLogger(Servlet.class);
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.info("doGet");
PrintWriter out = response.getWriter();
out.print("Servlet loaded");
out.flush();
out.close();
}
}
내 log4j2.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console">
<PatternLayout pattern="%d %p %c %m%n" />
</Console>
<File name="File" bufferedIO="true" fileName="logs/log4j2-file-sync-${date:HH:MM:ss.SSS}.log">
<PatternLayout pattern="%d %p %c %m%n" />
</File>
</Appenders>
<Loggers>
<Root level="all" includeLocation="false">
<AppenderRef ref="Console" />
<AppenderRef ref="File" />
</Root>
</Loggers>
</Configuration>
이것은 내가지고있어 오류입니다
The following web applications were stopped (reloaded, undeployed), but their
classes from previous runs are still loaded in memory, thus causing a memory
leak (use a profiler to confirm):
/myapp
Tomcat이 꽤 많은 시간 동안 문제를 누출 memoty 클래스 로더를 가지고 찾을 수 있습니다. 재배치시 전쟁에서 적재 된 모든 클래스를 언로드하지 않을 것입니다. – tsolakp
주위에 방법이 있습니까? 프로덕션 환경에서는 모든 배포 업데이트마다 서버를 다시 시작해야하며 적어도 모든 n 명의 사용자가 다시 배포해야합니다. 아마도 다른 서버를 사용해야할까요? – Christian
Tomcat의 최신 버전이 제대로 작동하는지 확신 할 수 없지만 새로운 배포가있을 때마다 Tomcat을 다시 시작해야한다는 것을 기억합니다. 그것은 6-7 년 전이었습니다. – tsolakp