우분투 18.04에서 Tomcat 9, openjdk 11.0.9.1을 사용하는 데 문제가 있습니다. 다음 지침에 따라 설치했습니다.https://linuxize.com/post/how-to-install-tomcat-9-on-ubuntu-18-04/
한동안은 잘 작동했지만 오늘은 응용 프로그램이나 Tomcat 관리자 페이지에 액세스하려고 하면 브라우저가 중단됩니다. 이 시간 동안 서비스가 다시 시작되지 않았습니다. Tomcat 로그에서 흥미로운 내용을 찾지 못했습니다.
"systemctl status tomcat"을 시도했는데 작업 수가 35개이고 제한이 37개인 것을 확인했습니다. 걱정되는 점은 공간이 거의 없는 것 같습니다.
그래서 세 가지 질문이 있습니다:
작업이란 무엇입니까? 스레드인가요? 프로세스? 다른 건 없나요?
35와 37은 어디에서 왔습니까? 37은 내 서버 크기(현재 매우 작음)를 기준으로 한 것입니까?
내 Tomcat 중단이 이것과 관련될 수 있습니까?
systemctl 상태 출력 예(여기에 표시되는 가동 시간은 이후 개선 없이 서비스를 다시 시작하려고 시도했다는 사실을 반영합니다.):
# systemctl status tomcat
● tomcat.service - Tomcat 9 servlet container
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-02-04 14:18:27 PST; 40min ago
Process: 194 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 212 (java)
Tasks: 35 (limit: 37)
CGroup: /system.slice/tomcat.service
└─212 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.pro
Feb 04 14:18:16 cloud.wolfeld.com shutdown.sh[20873]: /opt/tomcat/latest/bin/catalina.sh: 574: /opt/tomcat/latest/bin/catalina.sh: C
Feb 04 14:18:16 cloud.wolfeld.com systemd[1]: tomcat.service: Main process exited, code=exited, status=143/n/a
Feb 04 14:18:16 cloud.wolfeld.com systemd[1]: tomcat.service: Control process exited, code=exited status=2
Feb 04 14:18:16 cloud.wolfeld.com systemd[1]: tomcat.service: Failed with result 'exit-code'.
Feb 04 14:18:16 cloud.wolfeld.com systemd[1]: Stopped Tomcat 9 servlet container.
Feb 04 14:18:27 cloud.wolfeld.com systemd[1]: Starting Tomcat 9 servlet container...
Feb 04 14:18:27 cloud.wolfeld.com startup.sh[194]: Existing PID file found during start.
Feb 04 14:18:27 cloud.wolfeld.com startup.sh[194]: Removing/clearing stale PID file.
Feb 04 14:18:27 cloud.wolfeld.com startup.sh[194]: Tomcat started.
Feb 04 14:18:27 cloud.wolfeld.com systemd[1]: Started Tomcat 9 servlet container.
답변1
모두의 도움에 감사드립니다. 서버의 크기를 늘리고 JVM에 할당된 메모리를 늘렸지만 소용이 없었습니다. 재부팅 등을 하면 작업 제한이 자동으로 늘어나는 줄 알았는데 그렇지 않습니다.
결국 나는 작업 제한의 기본값인 37이리눅스 컴파일 시간 기본값이며 런타임 환경의 경험적 검사에 의존하지 않습니다. 이를 100 으로 재정의하고 /etc/systemd/system.conf
systemd 구성을 다시 로드하고 Tomcat 서비스를 다시 시작하면 애플리케이션이 다시 실행되었습니다.
DefaultTasksAccounting=yes
DefaultTasksMax=100
JVM과 시스템 메모리 사용량을 지켜봐야겠지만 지금은 괜찮습니다. 다시 한 번 감사드립니다.
답변2
제공하신 튜토리얼을 보면 Tomcat의 시스템 로깅은 files 에서 발생합니다 /opt/tomcat/latest/logs/catalina.out
. Tomcat이 중지된 이유에 대한 자세한 정보를 찾으려면 여기를 살펴봐야 합니다.
Tomcat 애플리케이션 서비스의 일반적인 문제는 메모리 제한입니다. JVM에 할당된 것보다 더 많은 메모리가 필요한 경우 정지될 수 있습니다. Tomcat이 현재 호스팅하고 있는 가상 호스트나 애플리케이션의 수는 모르지만 아마도 애플리케이션당 최소 500MB를 권장하고 Tomcat 웹 애플리케이션(hostmanager와 같은)의 경우 500MB를 추가하는 것이 좋습니다.
Tomcat이 소비하는 메모리 양을 줄이려면 이 파일을 편집해야 합니다 /etc/systemd/system/tomcat.service
.
예를 들어 4개의 애플리케이션을 호스팅하는 경우 2500MB(4x500 + 500 = 2500)를 사용해야 하므로 다음 행을 교체합니다.
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
그리고
Environment="CATALINA_OPTS=-Xms512M -Xmx2500M -server -XX:+UseParallelGC"