nohup 挂载多个jar包项目会把前面滴项目kill掉

本文解决nohup同时挂载多个jar包导致前一个项目被kill的问题,通过增加虚拟内存,避免因服务器内存不足而引发的程序退出。详细步骤包括检查内存、创建虚拟内存分区并挂载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                          nohup 挂载多个jar包项目会把前面滴项目kill掉

 nohup我就不解释了个人理解就是把程序挂载到服务器,并且服务器不关闭都会一直运行这样子。最近遇到一个很头疼滴问题,就是我用nohup挂载jar项目就会把前面第一个项目kill自动退出掉,网上找了很久都没有找到这个问题,百度不到。

问题来了:

  我这个jar程序是通过  nohup java -jar fwq.jar >fwq.log  2>&1 & 方式挂载到服务器正常使用滴。然后我还想挂载一个8086滴项目到服务器上面。

然后就出现了这个问题:

---> kill了你前面一个jar程序,然后各种百度对不对,都没有找到答案,俗话说闻道有先后,术业有专攻嘛,毕竟你叫一个搞后台滴去搞运维实在头疼。然后我试了很多次都没找到答案,包括nohup命令详细介绍。

具体可以参考下面:

total1:    表示物理内存总量。
used1:     表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free1:     未被分配的内存。
shared1:   共享内存,一般系统不会用到,这里也不讨论。
buffers1: 系统分配但未被使用的buffers 数量。
cached1:   系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。

used2:     实际使用的buffers 与cache 总量,也是实际使用的内存总量。
free2:     未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

Linux free -m 详细说明_风起云涌2021的博客-优快云博客 //这个是free 参数详解

问题点:是因为你服务器内存太小,可用空间太小了,这样会导致前面滴jar程序kill掉。买服务又很贵,1核2G都要好几百。

不担心咋们可以虚拟出一个磁盘分区,自动挂载到上面。

重点来了:

1,查看你服务器内存:

  free -m

2,建立一个分区:

dd if=/dev/zero of=/opt/swap bs=1024 count=1024000

选择一个较大的分区,建立分区文件(不同服务器参数不一样这个不纠结)命令表示在opt分区建立名为swap,大小为1G的虚拟内存文件

3,将swap文件设置为swap分区文件

chmod 600 /opt/swap  --赋予权限

mkswap /opt/swap

4,激活swap,启用分区交换文件

swapon /opt/swap

5,查看分区结果(刚开始是0看到这样说明就成功了)

 如果要卸载虚拟分区空间大家可以参靠这个大佬滴文章

(https://blog.youkuaiyun.com/herobacking/article/details/80371242)

咋们现在再来挂载:

然后在看看内存:(我们发现已经用了一些虚拟内存了)

ok,解决了这个问题:问题主要是你服务器内存太小,导致挂载失败。(这里省略一万字哈哈.......,有一种征服滴感觉哈哈哈,我怀疑你在开车但是我又找不到证据 /调皮,/调皮)

在使用 `nohup java -jar` 部署 JAR 时,应用可能会因为多种原因出现崩溃或意外退出的情况。以下是几种常见的解决方法: 1. **日志文件过大问题** 默认情况下,`nohup` 会将输出写入 `nohup.out` 文件中,如果未进行管理,该文件可能无限增长并导致磁盘空间耗尽,从而引发程序异常退出。为了避免这一问题,可以将标准输出和错误输出重定向到 `/dev/null`,即不记录任何输出: ```bash nohup java -jar xxxx.jar > /dev/null 2>&1 & ``` 这样可以有效避免因日志文件过大而导致的系统资源耗尽问题[^1]。 2. **内存配置不当** 如果 JVM 的堆内存设置不合理(例如 `-Xms` 和 `-Xmx` 设置过小),可能导致应用在处理大量请求或数据时发生 `OutOfMemoryError`。因此,建议根据实际需求调整 JVM 内存参数,并确保有足够的物理内存可用: ```bash nohup java -jar -Xms512m -Xmx1024m /xxx/yyy/aaa.jar & ``` 此外,还可以通过添加 `-XX:+HeapDumpOnOutOfMemoryError` 参数来生成堆转储文件,以便后续分析内存泄漏的原因[^2]。 3. **临时目录配置** 某些 Java 应用(尤其是基于 Tomcat 的 Spring Boot 应用)会在运行时使用默认的系统临时目录(如 `/tmp`)。如果该目录权限受限或磁盘空间不足,可能导致应用异常退出。为避免此类问题,可以通过 `-Djava.io.tmpdir` 显式指定一个具有足够空间和适当权限的临时目录: ```bash nohup java -Djava.io.tmpdir=/xxx/.../tmp -jar -Xms512m -Xmx512m /xxx/.../xxx.jar --server.tomcat.basedir=/xxx/.../tmp & ``` 同时,`--server.tomcat.basedir` 参数用于指定 Tomcat 的工作目录,防止其使用默认路径导致的问题[^2]。 4. **自动重启机制** 为了提高服务的可用性,可以在脚本中实现自动重启逻辑。例如,编写一个 Shell 脚本来定期检查应用是否仍在运行,并在检测到进程终止后重新启动它: ```bash #!/bin/bash while true; do if ! ps -p <PID> > /dev/null; then echo "Application is not running, restarting..." nohup java -jar -Xms512m -Xmx1024m /path/to/app.jar > /dev/null 2>&1 & fi sleep 60 done ``` 其中 `<PID>` 是应用的进程 ID。此脚本每分钟检查一次应用状态,若发现进程不存在,则自动重启应用[^4]。 5. **健康检查与监控** 使用 `curl` 或其他 HTTP 客户端工具对应用的健康检查接口进行轮询,确保应用始终处于可访问状态。如果检测失败,可以触发重启操作: ```bash #!/bin/bash if ! curl -s -f http://localhost:8080/actuator/health > /dev/null; then echo "Application health check failed, restarting..." pkill -f "java -jar" nohup java -jar -Xms512m -Xmx1024m /path/to/app.jar > /dev/null 2>&1 & fi ``` 上述脚本通过调用 `/actuator/health` 接口判断应用是否正常,若失败则杀死当前 Java 进程并重新启动[^5]。 6. **查看日志与调试信息** 若应用频繁崩溃但无明显外部表现,应优先检查 `nohup.out` 中的日志内容,寻找异常堆栈信息。此外,还可以结合系统日志(如 `/var/log/messages` 或 `dmesg` 输出)查找是否有 OOM Killer 杀死进程的记录: ```bash dmesg | grep -i kill ``` ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨技术铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值