使用pm2来保证Spring Boot应用稳定运行

原作者:dulingyulove  原文链接:https://www.bbsmax.com/A/KE5QmgZ35L/

Spring Boot开发web应用就像开发普通的java程序一般简洁,因为其内嵌了web容易,启动的时候只需要一条命令即可,非常方便。但是由此而来的问题是万一应用挂了怎么办?

java -jar server.jar

别担心,有pm2进程管理工具可以帮到你。

PM2简介

pm2原先是nodejs应用的进程管理工具,不过其良好的设计以及扩展性可以手动执行执行进程。

PM2安装

1.安装NodeJs

npm install pm2 -g

  

PM2基本命令

  • pm2 list 查看所有被PM2管理的进程列表
  • pm2 start xxx 启动一个应用
  • pm2 stop xxx 停止一个应用
  • pm2 restart xxx 重启一个应用
  • pm2 describe xxx 查看应用详情
  • pm2 startup, pm2 save 两条命令,用来保证服务器启动时,pm2管理的程序自动运行

Java程序处理

在jar的同级目录新建应用启动配置文件,如pm2.json,内容如下:

{"name": "my-server","script": "/usr/bin/java","args": ["-jar","server.jar"],"exec_interpreter": "","exec_mode": "fork"
}

说明如下:

  • name 进程名称(显示在pm2 list命令中)
  • script 执行进程名称,如果需要执行PHP脚本则填写php解释器的路径,本文为java
  • args 传给执行进程的参数,多个参数以数组单元分割
  • exec_interpreter NodeJs解析器,本文不适用
  • exec_mode 执行模式[cluster|fork]这个针对NodeJs应用的配置,非NodeJs应用统一fork

配置文件完成后,使用

pm2 start pm2.json

即可看到应用被启动

日志管理

日志路径在~/.pm2/logsstdoutstderr被分开存放,程序中的所有stdoutstderr都被收集方便查错。

常用命令

pm2 start app.js # 启动app.js应用程序
pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例# 4个应用程序会自动进行负载均衡
pm2 start app.js --name="api" # 启动应用程序并命名为 "api"
pm2 start app.js --watch # 当文件变化时自动重启应用
pm2 start script.sh # 启动 bash 脚本
pm2 list # 列表 PM2 启动的所有的应用程序
pm2 monit # 显示每个应用程序的CPU和内存占用情况
pm2 show [app-name] # 显示应用程序的所有信息
pm2 logs # 显示所有应用程序的日志
pm2 logs [app-name] # 显示指定应用程序的日志
pm2 flushpm2 stop all # 停止所有的应用程序
pm2 stop 0 # 停止 id为 0的指定应用程序
pm2 restart all # 重启所有应用
pm2 reload all # 重启 cluster mode下的所有应用
pm2 gracefulReload all # Graceful reload all apps in cluster mode
pm2 delete all # 关闭并删除所有应用
pm2 delete 0 # 删除指定应用 id 0
pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
pm2 reset [app-name] # 重置重启数量pm2 startup # 创建开机自启动命令
pm2 save # 保存当前应用列表
pm2 resurrect # 重新加载保存的应用列表
pm2 update # Save processes, kill PM2 and restore processes
pm2 generate # Generate a sample json configuration filepm2 start app.js --node-args="--max-old-space-size=1024"使用自定义node(而非环境变量中的node)执行脚本:pm2 full path                                                         comm       executor                            --                 space          appscript
/data/api/node/lib/node_modules/pm2/bin/pm2    start          /data/api-/node/bin/node   --                /data/api/bin/wwwpm2 start a node-app with its own execEnv.  -- means attach args to prev executorpm2 启动java项目:
pm2 start java -- -jar xxx.jar按CPU启动多核:
pm2 -i 0 start java -- -jar xxx.jar pm2 启动脚本并制定运行环境:
pm2 start ./start.json --name nm  --env production

自动重启

sudo pm2 start xxxx  // 启动服务
sudo pm2 save // 保存服务
sudo pm2 startup // 把已启动服务加到systemd中
sudo systemctl reboot // 重启,发现之前的服务都已经启动
sudo pm2 unstartup systemd // 删除自动启动服务如果不生效:请检查是否是以sudo执行,或者是用su用户操作
pm2 save 之后的文件是否有内容
应用依赖的其它进程是否应启动完成,例如数据库
在执行pm2 unstartup systemd
之前,即使已经pm2 delete app,重启后依然会启动服务。注:自动启动适用于稳定代码版本,如果代码发生变动,需要重新save、startup,否则pm2启动可能报错:path.js:1144
cwd = process.cwd();
^
Error: ENOENT: no such file or directory, uv_cwd
at Error (native)
at Object.resolve (path.js:1144:25)
at Function.Module._resolveLookupPaths (module.js:361:17)
at Function.Module._resolveFilename (module.js:431:31)
at Function.Module._load (module.js:388:25)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object. (/usr/lib/node_modules/pm2/lib/ProcessContainer.js:12:15)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)

参考资料:https://blog.csdn.net/nickDaDa/article/details/86737060

参考资料:https://www.bbsmax.com/A/KE5QmgZ35L/

参考资料:https://blog.csdn.net/nickDaDa/article/details/86748712

使用pm2来保证Spring Boot应用稳定运行相关推荐

  1. spring boot项目 中止运行 最常用的几种方法

    spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...

  2. spring boot编写并运行HelloWorld服务接口

    spring boot编写并运行HelloWorld服务接口 在主程序上要加包扫描注解@ComponentScan("com.example.demo1") package com ...

  3. Spring Boot注解的运行原理

    Spring Boot 是一个基于 Spring Framework 的开源框架,通过简化配置和开发过程,使 Spring 应用程序的开发变得更加快速和便捷.在 Spring Boot 中,注解是非常 ...

  4. Myeclipse2017下使用Maven搭建的spring boot项目怎样运行?

    刚开始接触SpringBoot以及Maven,在网上找到很多入门Demo,将这些Demo在Myecplise中导入后怎样运行? ①导入到Myecplise ②右击项目名-->Maven--> ...

  5. .jar中没有主清单属性_IDEA中spring boot helloword打包运行-0228-2020

    1.新建maven项目 2.项目构建 3.项目启动 4.打包启动 1.IDEA中新建maven项目 创建项目时选择 Maven,但是不必选择项目骨架, 直接单击 Next 按钮即可 输入组织名称.模块 ...

  6. 在Spring Boot启动时运行代码

    Spring Boot会自动为我们执行很多配置,但是迟早您将不得不做一些自定义工作. 在本文中,您将学习如何进入应用程序引导生命周期并在Spring Boot启动时执行代码 . 因此,让我们看看该框架 ...

  7. spring boot在vscode运行弹出“no such file or directory”

    Error trying to find JVM: Error: ENOENT: no such file or directory, lstat 'C:\Program Files\AdoptOpe ...

  8. 如何保证EDI系统长期稳定运行

    作为一个EDI运维工程师,深知系统故障对于我们来说永远都是心中的痛,但避免故障的原因却总是相同的,总结起来就是这几个字:防患于未然. 随着EDI领域的飞速发展,我们已经拥有了较为庞大的客户群,随之带来 ...

  9. maven+Spring boot 打包发布运行

    一.1.打jar包,点击maven下的package,利用插件打包 2.提示异常,程序包jdk.internal.org.objectweb.asm不存在 原因是 rt包没有打包到项目中去,需要在po ...

最新文章

  1. PyTorch踩过的12坑 | CSDN博文精选
  2. cucumber_java从入门到精通(5)使用maven创建cucumber_java项目
  3. linux 7.4 不能转发dns_linux深度攻略学习
  4. spark shell
  5. MVVM前后分离轻量级框架应用juicer和doT.js
  6. 60. Event onfocus 事件
  7. FRR BGP协议分析14 -- 静态路由的处理流程
  8. vsftp如何确定地址_VSFTP配置参数详解
  9. jquery抽奖转盘java,jquery——九宫格大转盘抽奖实例
  10. java给链表赋值_Java链表操作代码
  11. SEO超级外链留痕工具 最新SEO外链一键优化网站源码
  12. 2018华为软件精英挑战赛体会
  13. 【翻唱】学习日语歌 (青鸟)火影忍者 OP
  14. 短信工具类——mo信通
  15. 无线通信学习笔记(三)
  16. android 反调试 方案,【木马分析】使用高级反调试与反HOOK的安卓恶意ROOT软件的深度分析(一):NATIVE层的调试...
  17. 20191219 门面设计模式
  18. 火车票报销凭证打印跑政通
  19. pyecharts 标准线_pyecharts
  20. 怎样将excel中图表的横纵坐标互换。(亲测)

热门文章

  1. 软件测试工程师职业发展漫谈
  2. 深入探讨:linux中遍历文件夹下的所有文件
  3. 高校教材管理系统mysql_高校教材管理系统的设计与实现
  4. c++学习六(静态成员和友员函数)
  5. GPT-3.5 也能直接联网了!
  6. 计算机领域一般面试是会问到的各类常见算法的Big-O复杂度
  7. python保存文件的几种方式
  8. Linux 命令 htop 的使用
  9. 茶学领域如何用的上计算机,优秀茶学论文参考文献 茶学专著类参考文献哪里找...
  10. 产品经理必读的十本好书