查找项目
不知道项目名和端口号
ps -eaf | grep tomcat
ps -eaf | grep java
知道项目名,不知道端口号
ps -eaf | grep 项目名
知道端口号,不知项目名
某台服务器上部署很多个项目,比如以jar结尾、以war结尾的项目等等。
在众多项目中,知道某项目的端口号,但不知道该项目的名称,也不知道该端口号的进程,如图所示:
netstat -ntl查找进程 ps -eaf 来搜索java、Tomcat进程 kill kill -3 kill -9 java -jar还是 ./startup.up
想在上面的项目中,删除9010端口号的项目,然后重新部署新的jar包,于是,需要通过以下命令查找:
netstat -ntlp
找到端口号对应的进程杀掉,重新部署即可。
关闭项目
关闭命令
关闭项目时,我们一般使用kill
,比如 kill , kill -3 , kill -9
,那么,kill
的命令是什么?
kill命令的格式是 kill -Signal pid,其中 pid 就是进程的编号,signal是发送给进程的信号。
默认参数下,kill 发送 SIGTERM(15)信号给进程,告诉进程,你需要被关闭,请自行停止运行并退出,有时,我们还会传SIGTERM(3)和SIGTERM(9)
信号给进程:
kill pid
该方式告诉进程你需要被关闭,请自行停止运行并退出,进程可以清理缓存自行结束,也可以拒绝结束,它的优缺点同时存在。
优点
进程中的所有任务【线程】结束掉才会死掉,这就保证了数据库的安全。
JVM关闭: JVM进程中的线程只剩下守护线程才会被杀死。
比如,我在对接第三方接口时,对方已经响应并有数据返回,说明对方已经提交了事务,我如果使用kill -9 pid
的方式杀死进程,JVM【Tomcat】会停止所有的任务,我这边无法提交事务,从而造成数据不一致的问题,数据丢失便出现了。
这种方式在一定程度上保证了数据的安全性。
Tomcat的
shutdown.sh 或shutdown.bat
默认是这种方式。
缺点
正因为它的优点存在,假如我们在项目中写了线程的死循环,Tomcat等待任务【线程】终止关闭,而任务【线程】无法终止,这就造成了进程无法杀死。
我们可以在死循环中设置一个信号,比如public static volatile boolean flag=true;
如果为false时,便跳出死循环。
kill -3 pid
如果进程卡死,你需要记录当时的事故现场,那么应该用 kill -3 来记录事故现场的信息然后退出。
可能是我接触的项目比较少,这种情况很少遇到。
kill -9 pid
这个用到的比较多,比如我们使用spring boot时,直接使用kill -9 pid来杀死JVM进程,比如 kill -9 test.jar
,这种情况有利有弊。
优点
可以快速关掉JVM,但前提是知道JVM进程中没有用户线程,只剩下了守护线程,
缺点
正因为可以快速关闭JVM,这也容易造成数据的不安全性,也就是上文所说的数据丢失。
启动项目
war包结尾
这种多见于spring MVC的项目
- Tomcat的bin目录
- Linux项目
- sh startup.sh
- ./startup.sh
- window项目
- 单机startup.bat即可
- Linux项目
jar包结尾
这是多见于spring boot的项目
java -jar 项目名