使用pm2来保证Spring Boot应用稳定运行
使用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/logs
,stdout
和stderr
被分开存放,程序中的所有stdout
和stderr
都被收集方便查错。
常用命令
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应用稳定运行相关推荐
- spring boot项目 中止运行 最常用的几种方法
spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...
- spring boot编写并运行HelloWorld服务接口
spring boot编写并运行HelloWorld服务接口 在主程序上要加包扫描注解@ComponentScan("com.example.demo1") package com ...
- Spring Boot注解的运行原理
Spring Boot 是一个基于 Spring Framework 的开源框架,通过简化配置和开发过程,使 Spring 应用程序的开发变得更加快速和便捷.在 Spring Boot 中,注解是非常 ...
- Myeclipse2017下使用Maven搭建的spring boot项目怎样运行?
刚开始接触SpringBoot以及Maven,在网上找到很多入门Demo,将这些Demo在Myecplise中导入后怎样运行? ①导入到Myecplise ②右击项目名-->Maven--> ...
- .jar中没有主清单属性_IDEA中spring boot helloword打包运行-0228-2020
1.新建maven项目 2.项目构建 3.项目启动 4.打包启动 1.IDEA中新建maven项目 创建项目时选择 Maven,但是不必选择项目骨架, 直接单击 Next 按钮即可 输入组织名称.模块 ...
- 在Spring Boot启动时运行代码
Spring Boot会自动为我们执行很多配置,但是迟早您将不得不做一些自定义工作. 在本文中,您将学习如何进入应用程序引导生命周期并在Spring Boot启动时执行代码 . 因此,让我们看看该框架 ...
- 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 ...
- 如何保证EDI系统长期稳定运行
作为一个EDI运维工程师,深知系统故障对于我们来说永远都是心中的痛,但避免故障的原因却总是相同的,总结起来就是这几个字:防患于未然. 随着EDI领域的飞速发展,我们已经拥有了较为庞大的客户群,随之带来 ...
- maven+Spring boot 打包发布运行
一.1.打jar包,点击maven下的package,利用插件打包 2.提示异常,程序包jdk.internal.org.objectweb.asm不存在 原因是 rt包没有打包到项目中去,需要在po ...
最新文章
- PyTorch踩过的12坑 | CSDN博文精选
- cucumber_java从入门到精通(5)使用maven创建cucumber_java项目
- linux 7.4 不能转发dns_linux深度攻略学习
- spark shell
- MVVM前后分离轻量级框架应用juicer和doT.js
- 60. Event onfocus 事件
- FRR BGP协议分析14 -- 静态路由的处理流程
- vsftp如何确定地址_VSFTP配置参数详解
- jquery抽奖转盘java,jquery——九宫格大转盘抽奖实例
- java给链表赋值_Java链表操作代码
- SEO超级外链留痕工具 最新SEO外链一键优化网站源码
- 2018华为软件精英挑战赛体会
- 【翻唱】学习日语歌 (青鸟)火影忍者 OP
- 短信工具类——mo信通
- 无线通信学习笔记(三)
- android 反调试 方案,【木马分析】使用高级反调试与反HOOK的安卓恶意ROOT软件的深度分析(一):NATIVE层的调试...
- 20191219 门面设计模式
- 火车票报销凭证打印跑政通
- pyecharts 标准线_pyecharts
- 怎样将excel中图表的横纵坐标互换。(亲测)