在Linux中tomcat占用内存过高可以通过导出hprof日志来解决

Linux下Tomcat吃内存多,确实能靠导出hprof日志搞。
主要就俩法子。

自动导出法:
1 . 先找到Tomcat装在哪儿了,进bin目录。
2 . 找到catalina.sh文件,用文本编辑器打开。
3 . 在里面加几行JVM参数,像这样:'-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/tomcat.hprof'。
这行是出问题就自动导出,还有个'-XX:OnOutOfMemoryError="java -jar jvisualvm.jar --executions 1 %p"'能直接开JVisualVM。
4 . 保存改完的catalina.sh。
5 . 重启Tomcat。
它以后内存满了,就自动把内存转存成hprof文件,存你指定的路径。

手动导出法:
1 . 先看Tomcat进程号PID。
在命令行敲'jps',找到Tomcat那行的数字。
2 . 接着敲命令:'jmap -dump:format=b,file=/tmp/tomcat.hprof 1 2 3 4 '(把1 2 3 4 换成你的PID)。
3 . 这就导出内存快照了,文件就是.hprof格式。
4 . 然后用JVisualVM或者Eclipse Memory Analyzer(MAT)打开这个文件,看内存里都有啥,哪个对象占了太多。

说实话,这两种法子都能帮你看清Tomcat吃内存的原因,是对象太多还是哪个循环引用了。
搞明白以后,再对症下药改代码,比如减少对象创建、加弱引用啥的。

LINUX系统怎么看日志文件_LINUX查看系统日志方法

哎哟,你这描述也太详细了吧,像看操作手册似的。
不过我给你捋捋几个实际用得多的场景,你看看是不是这样:
---
上周有个客人问我 Ubuntu 2 2 .04 系统怎么快速看 Nginx 出问题了。
我这直接就敲了个 journalctl -u nginx.service,他反应说:"哇,这比找 /var/log/nginx/error.log 方便多了"。
我赶紧补充说:"对啊,但要是他系统是 RHEL 7 的,那你得改用 journalctl -u nginx 才对"。

我自己踩过的坑是 在 Debian 系统上查安全事件。
本来想用 cat /var/log/secure,结果发现新版本都改叫 auth.log 了。
幸好我看了你的笔记,不然得绕半天弯子。
不过 grep "failed" /var/log/auth.log 这个命令是真管用,半夜看服务器暴力破解的时候特别直观。

还有个有意思的 是用 dmesg 查硬盘问题。
有次我朋友服务器突然蓝屏,我就让他重启后马上 dmesg | grep -i error,果然找到是某个 SSD 接口供电不稳。
这命令比看 syslog 里的硬件报告直接多了。

不过要说最烦人的是 logrotate。
我上次配置 Apache 日志轮转,本来想用 logrotate -d /etc/logrotate.d/apache2 先试试,结果手滑按成了 -f,直接把半年前的日志全删了。
那阵子运维团队追着我要备份,我真是欲哭无泪。

---
反正你看着办吧。
要快速定位问题就用 journalctl,搞硬件问题就靠 dmesg,平时安全监控 auth.log 是基础,别把 logrotate 搞砸了就行。
我还在想这个问题:为啥有些系统 journalctl 不显示 auth.log 的内容?这个我真没搞懂。

在Linux环境下日志输出卡住的原因是什么?如何解决?

日志输出卡住: 1 . 依赖库冲突。
ldd <程序名> 查看动态库版本。
Jetson Orin Nano 案例:libHCPreview.so 版本不兼容。
2 . 权限不足。
ls -l 查看文件权限。
案例:日志文件不可写,chmod 7 7 7 修复。
3 . 网络问题。
ping 测试连通性。
案例:摄像头连接超时,调整防火墙规则解决。
4 . 死锁阻塞。
gdb bt 查看线程堆栈。
案例:多线程锁竞争导致卡住。
5 . 缓冲区过小。
调整日志配置 bufferSize。
案例:同步日志阻塞,改为异步输出解决。
6 . 系统资源耗尽。
top 查看内存/CPU。
案例:OOM 事件导致进程卡死。

别信含糊排查。
先 ldd,再 ls -l。