作为一个Java学者,记性不好那就好好的记录一些
Java jar包命令 请将下描述 xxx 替换为jar包名字
1、启动jar包 : java -jar xxx.jar
说明:一个界面 启动启动jar包,需要安装jdk环境,也可以直接在windows上面通过 win+r 命令行启动,随用随关,界面开启服务启动,界面关闭服务停止,也可以使用 ctrl + C 退出程序运行
2、单界面启动多个jar包 (端口不能一样): java -jar xxx.jar &
说明: 此命令可以让Java程序在后台运行, 单个窗口也能同时启动多个Java服务,但是当窗口关闭时,程序依旧停止
3、Linux下后台运行jar包: nohup java -jar xxx.jar &
说明:nohup 不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
4、加目录运行jar包 nohup java -jar /appdata/system-jar/xxx.jar &
其他也是类似
查询Java程序及端口占用等
- 0、查询所有已用端口 netstat -tulnp
- 1、查询端口占用
netstat -nlp |grep : 端口号 如 netstat -nlp |grep :8080 - 2、查询程序启动状况
ps -ef | grep hello-world.jar 或者
ps aux | grep hello-world.jar 或者
ps auxf | grep hello-world.jar
查询指定jar包时请将 hello-world 替换为你的jar包名字
PS:上面的两个命令也可不全拼,也就是可以 “ ps -ef | grep hello-wo ” " ps aux|grep hello-w ”
这样分别是查询所有hello-wo开头,以hello-w开头程序运行情况 - 3、查询所有Java进程情况
ps -ef | grep java
JVM 进程关闭命令 kill
通过前面 ps -ef | grep xxx 或 ps auxf | grep 查询进程号
如下命令所示
[root]# ps -ef | grep java
root 22766 8447 0 19:34 pts/1 00:00:12 java -jar demo-0.0.1-SNAPSHOT.jar
root 23845 22419 0 19:55 pts/2 00:00:00 grep --color=auto java
1、强制终止程序(不推荐): kill -9 [pid] 如上案例 kill -9 22766
2、终止全部进程 kill -9 -1
3、杀死指定进程 kill -6 [pid] 如上案例 : kill -9 22766
4、杀死所有的进程: killall 程序名 或者 pkill 程序名 如: killall demo
5、杀死指定进程: kill -15 [pid] 会有一定延迟
上述kill 命令在分布式情况下可能导致未知异常出现,如在下单时,调用支付系统支付,未接收到返回参数系统终止运行,导致订单状态依旧为未支付,实际已经支付。
6、比较优雅保险的杀死进程参考如下代码
链接 :https://mp.weixin.qq.com/s/-pftYmw4oBBn_GO011_hOA
第一步,应用进程启动的时候,初始化Signal实例,它的代码示例如下:
Signal sig = new Signal(getOSSignalType());
其中Signal构造函数的参数为String字符串,也就上文介绍的信号量名称。
第二步,根据操作系统的名称来获取对应的信号名称,代码如下:
private String getOSSignalType(){
return System.getProperties().getProperty("os.name").
toLowerCase().startsWith("win") ? "INT" : "USR2";
}
判断是否是windows操作系统,如果是则选择SIGINT,接收Ctrl+C中断的指令;否则选择USR2信号,接收SIGUSR2(等价于kill -12 pid)指令。
第三步,将实例化之后的SignalHandler注册到JVM的Signal,一旦JVM进程接收到kill -12 或者 Ctrl+C则回调handle接口,代码示例如下:
Signal.handle(sig, shutdownHandler);
其中shutdownHandler实现了SignalHandler接口的handle(Signal sgin)方法,代码示例如下:
public class ShutdownHandler implements SignalHandler {
/**
* 处理信号
*
* @param signal 信号
*/
public void handle(Signal signal) {
}
}
第四步,在接收到信号回调的handle接口中,初始化JVM的ShutdownHook线程,并将其注册到Runtime中,示例代码如下:
private void registerShutdownHook(){
Thread t = new Thread(new ShutdownHook(), "ShutdownHook-Thread");
Runtime.getRuntime().addShutdownHook(t);
}
第五步,接收到进程退出信号后,在回调的handle接口中执行虚拟机的退出操作,示例代码如下:
Runtime.getRuntime().exit(0);
JVM退出时,底层会自动检测用户是否注册了ShutdownHook任务,如果有,则会自动执行注册钩子的Run方法,应用只需要在ShutdownHook中执行扫尾工作即可,示例代码如下:
class ShutdownHook implements Runnable{
@Override
public void run() {
System.out.println("ShutdownHook execute start...");
try {
TimeUnit.SECONDS.sleep(10);//模拟应用进程退出前的处理操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ShutdownHook execute end...");
}
}
通过以上的几个步骤,我们可以轻松实现JVM的安全退出,另外,通常安全退出需要有超时控制机制,例如30S,如果到达超时时间仍然没有完成退出,则由停机脚本直接调用kill -9强制退出
查询日志相关命令
1、cat 查看一个文件
-E: 显示行结束符$
-n: 对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行
-T:显示制表符
eg: cat tmp.log
2、more 分页查看文件
文件内容较多时,用more命令查看,空格键下翻,b键上翻,Q退出
eg: more tmp.log
3、head 显示前十行内容
eg: head tmp.log
获取前多少字节 head -c字节数据 tmp.log
获取前12个字节 eg : head -c12 tmp.log
4、 tail 命令 重点
tail tmp.log 获取后10行数据
tail -f tmp.log 动态的获取文件数据
tail -222f tmp.log 动态获取文件数据,并展示222行 。行数可以指定
5、vi 命令
vi tmp.log 打开指定文件
输入 i 进入文件编辑 ESC 退出文件编辑
输入 :wq 保存并退出 输入 :!q 强制退出
vi 编辑状态下
" / 字段名称" 回车 查询指定字段位置 -- 注意为英文状态
N 下一个 shift +n 上一个
命令.png
查找显示.png
6、编辑配置文件类 vim 与vi类似 展示效果不一样
grep 命令
grep 命令参考 :https://www.linuxidc.com/Linux/2017-05/143549.htm
grep:作用:文本搜索工具,根据用户指定的模式,对目标文件逐行进行匹配检查,打印匹配到的行
模式:由正则表达式的元字符及文本字符所编写出的过滤条件
-v:取反 显示不能被匹配到的行
-i:忽略字符的大小写
-n:显示行号
-c:显示统计到的行数,等同于wc -l
-o:仅显示匹配到的字符串
-q:静默输出(不输出任何信息) 只关心命令的执行结果 不关心输出结果
-A #:后#行
-B #:前#行
-C #:前后#行 查看日志 搜索关键字排查错误的时候
-e:指定多个条件,条件是或的关系
-w 匹配整个单词
-E === egrep 支持扩展的正则表达式
-F === fgrep 不支持正则表达式
显示出/etc/passwd下root的前后两行(第一个root为第一行,所以没有前两行)
[root@linuxidc ~]# grep -C 2 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
基本正则表达式
字符匹配:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符 ——> 如:[abc] a | b | c
[^]:匹配指定范围外的任意单个字符 ——> 如:[^abc] 除abc之外的字符
[:alnum:] 数字和字符
[:alpha:] 英文大小写字符 a-z A-Z
[:lower:] 小写字母
[:upper:] 大写字母
[:space:] 专门匹配空格
匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数
:匹配其前面的字符任意次 0-无穷
[root@linuxidc ~]# grep "r" /etc//passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
.*:任意长度的任意字符出现任意次
[root@linuxidc ~]# grep "gdm.*" /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
?:匹配前面的字符出现0次或者1次 (其前面的字符是可有可无的)
+:匹配前面的字符至少1次
{m,}:匹配前的字符至少出现m次
{m,n}:匹配前面的字符出现至少m次至多n次
{0,n}:匹配前面的字符最多出现n
{m,}:匹配前的字符至少出现m次
位置锚定:用来定位字符出现的位置
^锚定行首(用于模式最左侧)
[root@linuxidc ~]# grep "^root" /etc//passwd
root:x:0:0:root:/root:/bin/bash
" /etc//passwd
root:x:0:0:root:/root:/bin/bash
zhouao:x:500:500:zhouao:/home/zhouao:/bin/bash
openstack:x:3000:3000::/home/openstack:/bin/bash
^:空行或包含空白字符的行
单词:非特殊字符组成的连续字符(字符串)都称为单词
\b \b:匹配词首和词尾
[root@linuxidc ~]# grep '\broot' /etc//passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
< >:匹配词首和词尾
例如:找出/etc/passwd下以/bin/bash结尾的行
[root@linuxidc ~]# grep "bash>" /etc//passwd
root:x:0:0:root:/root:/bin/bash
zhouao:x:500:500:zhouao:/home/zhouao:/bin/bash
openstack:x:3000:3000::/home/openstack:/bin/bash
分组及引用
():将一个或多个字符捆在一起,当做一个整体进行处理
分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中
\1:模式从左侧起,第一个括号以及与之匹配的右括号之间的模式所匹配到的字符
\2:模式从左侧起,第二个括号以及与之匹配的右括号之间的模式所匹配到的字符
\3:模式从左侧起,第三个括号以及与之匹配的右括号之间的模式所匹配到的字符
[root@linuxidc ~]# grep "r..t" /etc//passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@linuxidc ~]# grep "^(r..)t.*\1" /etc//passwd
root:x:0:0:root:/root:/bin/bash
TOP 命令
1、查询指定进程信息,需要进程pid top -p [pid]
2、 查询系统性能top 命令
解释说明:
a、系统运行时间及平均复制
top - 09:29:56 up 7 days, 23:18, 1 user, load average: 0.01, 0.04, 0.05
当前时间 09:29:56
系统运行时间7 days, 23:18(未重启过)
用户数量 1 user
最近5分钟,10分钟,15分钟平均负载
b、任务--进程
Tasks: 65 total, 1 running, 64 sleeping, 0 stopped, 0 zombie
总共有65个进程,一个运行中,64个休眠, 停止状态0个,zombie(僵尸)状态0个
c、CPU状态
%Cpu(s): 1.3 us, 0.7 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
1.3 us -- 用户空间占用CPU的百分比为 1.%
0.7 sy -- 内核空间占用CPU的百分比为 0.7 %
0.0 ni — 改变过优先级的进程占用CPU的百分比 0%
98.0 id --空闲CPU的百分比 98%
0.0 wa -- IO等待占用CPU的百分比
0.0 hi -- 硬中断(Hardware IRQ)占用CPU的百分比0%
0.0 si -- 软中断(Software Interrupts)占用CPU的百分比 0%
0.0 st -- 当前VM中的cpu cycle被虚拟化偷走的比例 0%
d、内存
KiB Mem : 1016164 total, 143328 free, 258936 used, 613900 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 587032 avail Mem
第一行 物理内存使用
1016164 total -- 物理内存总量 1G
143328 free -- 空闲内存总量 143M
258936 used -- 使用中的内存总量 258M
613900 buff/cache -- 缓存的内存总量 613 M
第二行 虚拟内存使用 -- swap 交换分区
0 total -- 交换区总量
0 free -- 使用的交换区总量
0 used -- 空闲交换区总量
587032 avail Mem -- 缓冲的交换区总量
上述使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
如果出于习惯去计算可用内存数,这里有个近似的计算公式:第一行的free + 第一行的buffers + 第二行的cached,按这个公式此台服务器的可用内存: 143328 + 613900 + 587032 = 1344260 -- 1.3G
e 、各进程的状态监控
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1972 root 20 0 180196 49360 22636 S 6.2 4.9 69:03.47 consul
1 root 20 0 51468 3732 2512 S 0.0 0.4 1:18.38 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:01.02 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u2:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 1:57.84 rcu_sched
10 root rt 0 0 0 0 S 0.0 0.0 0:03.13 watchdog/0
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
14 root 20 0 0 0 0 S 0.0 0.0 0:00.15 khungtaskd
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
PID:进程ID,进程的唯一标识符
USER:进程所有者的实际用户名。
PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
S:这个是进程的状态。它有以下不同的值:
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
其他的一些杂项命令
1、查询当前路径 pwd
[root]# pwd
/appdata/jar
2、查询列表 ls 查询详情 ll
[root@xxx jar]# ls
demo-0.0.1-SNAPSHOT.jar nohup.out null
[root@xxx jar]# ll
total 27920
-rw-r--r-- 1 root root 28577372 Aug 21 19:30 demo-0.0.1-SNAPSHOT.jar
-rw------- 1 root root 2866 Aug 21 19:34 nohup.out
-rw-r--r-- 1 root root 7896 Aug 21 19:54 null
3、上传 “rz” , 下载 "sz xxx"
下载demo : [root@xxx jar]# sz demo-0.0.1-SNAPSHOT.jar
4、查找目录:find /(查找范围) -name '查找关键字' -type d
5、查找文件:find /(查找范围) -name 查找关键字 -print
网友评论