linux常用命令

mkdir指令:创建文件夹

$ mkdir [选项] DirName

命令中的[选项]一般有以下两种:

    -m    用于对新建目录设置存取权限,也可以用 chmod 命令进行设置。

    -p     需要时创建上层文件夹(或目录),如果文件夹(或目录)已经存在,则不视为错误

 例一:在桌面下面创建以“demo”命名的文件夹。
    使用以下命令即可。
    mkdir 桌面/demo

 例二:在桌面下面创建以“demo”命名的文件夹,并且给文件夹赋权限,权限为123。
    mkdir  123  桌面/demo

rm指令:删除文件夹

$ rm [选项] DirName

命令中的[选项]一般有以下几种:

    -i 删除前逐一询问确认。

  -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。

  -r 将目录及以下之档案亦逐一删除。

例一:删除所有C语言程序文档;删除前逐一询问确认。
    rm -i *.c

例二:将 Finished 子目录及子目录中所有档案删除。
    rm -r Finished 
$ rm -rf !(keep) #删除keep文件之外的所有文件

$ rm -rf !(keep1 | keep2) #删除keep1和keep2文件之外的所有文件

$ ls | grep -v xx-file | xargs rm #删除xx-file文件之外的所有文件

$ find ./test/ | grep -v xx-file | xargs rm

删除文件内容

$ echo "" > filename              //可删除大文件

$ truncate -s 0 filename          //大文件有时候失败

$ ls -lh filename                 //查看文件大小  

vi指令:创建文件

$ vi filename :打开或新建文件,并将光标置于第一行首

$ vi +n filename :打开文件,并将光标置于第n行首

$ vi + filename :打开文件,并将光标置于最后一行首

$ vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处

$ vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename

$ vi filename....filename :打开多个文件,依次进行编辑

ll指令:查看带有隐藏的文件

$ ll -al

cat,sed,tail指令:查看文件内容(查看日志)

$cat -n 日志文件| grep 'keyword'  //根据字符串查询日志中关键词出现的位置

$sed -n '/起始时间/,/结束时间/p' 日志文件  //查看某段时间内的日志

$sed -n '/起始时间/,/结束时间/p' 日志文件| grep 'keyword' //查看某段时间内的关键字日志

$tail -n 10 日志文件  //查询日志尾部最后10行的日志;

$tail -n +10 日志文件 //查询10行之后的所有日志;

$head -n 10 日志文件 //查询日志文件中的头10行日志;

$head -n -10 日志文件 //查询日志文件除了最后10行的其他所有日志;

$cat -n test.log |grep "地形" >xxx.txt //使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析

su指令:远程访问

su 用户名:远程访问

$ su xx

cp,mv指令:复制,移动文件

// 拷贝的指定目录并修改文件名
$ cp -r xxx.txt /opt/xxy.txt $ mv -r xxx.txt /opt/xxy.txt

ps指令 

ps -u $USER x | grep xxx  :-u $USER查看当前用户的进程

ps的参数:
-e 显示所有进程。
-f 全格式。
-h 不显示标题。
-l 长格式。
-w 宽输出。
a 显示终端上的所有进程,包括其他用户的进程。
r 只显示正在运行的进程。
x 显示没有控制终端的进程。
id:用于显示用户的ID,以及所属群组的ID。
[root@rhel ~]# id ab
uid=515 (ab) gid=517(ab) 组=517(ab),518(ou)
//用户ab的UID是515,主要组群是ab,主要组群的GID是517,用户归属于ab和ou组群

win系统查看硬件信息

 cmd中wmic命令获取Win系统下硬件信息

wmic命令获取Win系统下硬件信息
1、查询网卡信息:wmic nicconfig get macaddress
2、查询cpu序列号:wmic cpu get processorid
3、查询主板序列号:wmic baseboard get serialnumber
4、查询BIOS序列号:wmic bios get serialnumber

 查看CPU的统计信息:lscpu

 查看CPU的详细信息:cat /proc/cpuinfo

 查看CPU型号:cat /proc/cpuinfo |grep name |cut -f2 -d : |uniq -c

一、简介
uniq用于重复数据处理,使用前先sort排序。
二、命令格式
uniq [OPTION]... [INPUT [OUTPUT]]
option:
-c:在数据行前出现的次数
-d:只打印重复的行,重复的行只显示一次
-D:只打印重复的行,重复的行出现多少次就显示多少次
-f:忽略行首的几个字段
-i:忽略大小写
-s:忽略行首的几个字母
-u:只打印唯一的行
-w:比较不超过n个字母
三、示例
file="tmp/ut.txt"

#相同数据行只显示一次
sort ${file} | uniq

#相同数据行只显示一次,行首显示出现的次数
sort ${file} | uniq -c

#忽略大小写判断,相同数据行只显示一次,行首显示出现的次数
sort ${file} | uniq -ic

#只显示有重复的数据行,重复数据行只显示一次,行首显示出现的次数
sort ${file} | uniq -dc

#只显示有重复的数据行,重复数据行显示所有的重复
sort ${file} | uniq -D

#只显示不重复的数据行,行首显示出现的次数
sort ${file} | uniq -uc

#忽略行首的9个字母后,对行剩下数据作为判断依据,相同数据行只显示一次,行首显示出现的次数
sort ${file} | uniq -cs9

#忽略行首的2个字段后,对行剩下数据作为判断依据,相同数据行只显示一次,行首显示出现的次数
sort ${file} | uniq -cf2

linux系统查看硬件信息

$ free -m             # 查看内存使用情况
$ cat /proc/meminfo       # 查看内存使用详细信息
$ lsblk             # 查看硬盘和分区情况
$ fdisk -l            # 查看硬盘和分区详细情况
$ lspci | grep -i ethernet   # 查看网卡
$ lspci | grep -i vga      # 查看显卡
$ uname -a               # 查看内核版本
$ cat /etc/redhat-release      # 查看系统版本
$ ip link                # ip命令查看网卡MAC地址
$ cat /sys/class/net/eth0/address  # 查看eth0的MAC地址

dmidecode需要root权限

 $ dmidecode                          # 打印所有硬件信息
 $ dmidecode -q                       # 打印所有硬件信息,比较简洁
 $ dmidecode -h                       # 获取帮助
 $ dmidecode | grep 'Product Name'    # 以过滤的方式来查看指定的硬件信息
 $ dmidecode --type bios        # 查看BIOS相关的硬件信息
 $ dmidecode --type system      # 查看系统相关的硬件信息
 $ dmidecode --type baseboard   # 查看主板相关的硬件信息
 $ dmidecode --type chassis     # 查看机箱相关的硬件信息
 $ dmidecode --type processor   # 查看处理器相关的硬件信息
 $ dmidecode --type memory      # 查看内存相关的硬件信息

netstat指令:查看端口

# 查看全部端口占用情况
$ netstat -anp  或者   netstat -tln

# 查看具体端口被哪个程序占用
$ lsof -i :8080

#查看已知端口占用情况
$ netstat -anp | grep 8080    或者   netstat -tln | grep 8080

df 命令:用于显示磁盘分区上的可使用的磁盘空间

# 以可读性高的结果展示磁盘分区上的可使用的磁盘空间
$ df -h  

du指令:查看当前目录和子目录文件夹/文件大小情况

# 查看当前目录的总大小
$ du -sh  
# 查看当前目录所有子目录的大小
$ du -sh * 
# 查看当前目录和所有子目录大小,最后一行会显示当前目录的总大小,不包括隐藏文件
$ du -ach *
# du -sh 目录路径
$ du -sh /usr

ls指令:列出当前工作目录下的所有文件/文件夹的名称

# 显示成字节大小
$ ls -l
# 以KB、MB等为单位进行显示更加直观
$ ls -lh
# 按照文件大小排序(由大到小)
$ ls -lhS
# 可将隐藏文件的大小显示出来
$ la -lh

find指令:查找某个文件的路径

$ sudo find / -name osg
$ sudo find /usr -name osg
$ sudo find /usr -name "*osg*" 

nohup命令:后台执行程序

$ nohup java -jar xxx.jar >aaa.log &

nohup 即 no hang up 不挂断 ,关闭SSH客户端连接,程序不会中止运行,输出的内容重定向到指定的文件aaa.log

&代表在后台运行 ,ctrl+c 后程序也会继续运行

> 标准重定向符,允许我们创建一个 0KB 的空文件。它通常用于重定向一个命令的输出到一个新文件中。在没有命令的情况下使用重定向符号时,它会创建一个文件。

/dev/null 可以看作黑洞,等价于一个只写文件。所有写入它的内容都会永远丢失,尝试从它那儿读取内容则什么也读不到。也就是将所有产生的日志将被丢弃

2>&1 符号>&是一个整体代表将标准错误2重定向到标准输出1,如果是2>1的话,代表将标准错误输出到文件1,而不是重定向到标准输出流

lsblk指令:查看磁盘名称(硬盘和分区信息)

$ lsblk # 显示所有块设备信息

gnome-disks指令:查看硬盘使用情况的图形化界面。

$ gnome-disks  # 打开硬盘使用情况的图形化界面

top指令:查看cpu使用情况

$ top

sar指令:查看cpu历史使用情况

$ sar

  

检查磁盘是否损坏

1.使用smartmontools工具来检查磁盘smart状态

$ smartctl -a /dev/sda (sda为磁盘设备名)

2.使用fsck命令来检查文件系统的完整性

$ fsck /dev/sda1 (sda1为文件系统所在分区)

3.使用badblocks命令来检查磁盘坏道

$ badblocks -v /dev/sda (sda为磁盘设备名)

4.查看所有可用的硬盘,包括硬盘名称、大小、文件系统类型

$ fdisk -l

5.查看特定硬盘分区,包括硬盘名称、大小、文件系统类型

$ fdisk -l /dev/sda (sda为硬盘名称)

  

jvm调优

调优原则

  • GC的时间足够的小
  • GC的次数足够的少
  • 发生Full GC的周期足够的长
  • 针对JVM堆的设置,一般可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,我们通常把最大、最小设置为相同的值。
  • 年轻代和年老代将根据默认的比例(1:2)分配堆内存,可以通过调整二者之间的比率NewRadio来调整二者之间的大小,也可以针对回收代,比如年轻代,通过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。同样,为了防止年轻代的堆收缩,我们通常会把-XX:newSize -XX:MaxNewSize设置为同样大小。
  • 年轻代和年老代设置多大才算合理? 如果应用存在大量的临时对象,应该选择更大的年轻代;如果存在相对较多的持久对象,年老代应该适当增大。Full GC尽量少,让年老代尽量缓存常用对象,JVM的默认比例1:2也是这个道理。通过观察应用一段时间,看其他在峰值时年老代会占多少内存,在不影响Full GC的前提下,根据实际情况加大年轻代,比如可以把比例控制在1:1。但应该给年老代至少预留1/3的增长空间。

 

查看参数

 

jps -l 查看进程编号
jinfo -flag 具体参数 java进程编号
jinfo -flags 具体参数
查看JVM出厂默认设置:java -XX:+PrintFlagsInitial
查看JVM修改更新的内容:java -XX:+PrintFlagsFinal -version
查看默认垃圾回收器:java -XX:+PrintCommandLineFlags -version

 

常用参数

 

-Xmx(-XX:MaxHeapSize):初始大小内存:初始化的值是物理内存的四分之一
-Xms(-XX:InitialHeapSize):最大分配内存:初始化的值是物理内存的六十四分之一
-Xss(-XX:ThreadStackSize):设置单个线程栈的大小,一般默认为512k~1024k
-Xmn:设置年轻代的大小
-XX:MetaspaceSize:设置元空间大小 元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间的区别在于:元空间不在虚拟机中,而是在本地内存中,默认情况下,元空间的大小仅受本地内存限制。

实战

-Xms 128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC
解析:

  • -Xms 128m:初始内存128M
  • -Xmx4096m :最大堆内存4G
  • -Xss1024k:初始栈大小1024K
  • -XX:MetaspaceSize=512m:元空间512M
  • -XX:+PrintCommandLineFlags:打印默认参数
  • -XX:+PrintGCDetails :打印GC回收的细节
  • -XX:+UseSerialGC:串行垃圾回收器
  • -XX:+PrintGCDetails命令打印的
  • -XX:SurvivorRatio:设置新生代中eden和S0/S1空间的比例。
  • -XX:NewRatio:配置年轻代与老年代在堆结构的占比。
  • -XX:MaxTenuringThreshold:设置垃圾的最大年龄,java8之后这个值最大只能设置为15,最低是0

 

默认新生区比例:-XX:SurvivorRatio=8,Eden:S0:S1=8:1:1;

 

    • 假如:-XX:SurvivorRatio=4,Eden:S0:S1=4:1:1。SurvivorRatio的值就是设置eden去的比例占多少,S0和S1相同。
    • 假如:-XX:NewRatio=2新生代占1,老年代2,年轻代占整个堆的1/3。
    • 假如:-XX:NewRatio=4新生代占1,老年代占4,年轻带占整个堆的1/5。NewRatio的值就是设置老年代的占比,剩下的1给新生代。

 

查看进程

ps -ef|grep java  

jsp

如果不指定hostid就默认为当前主机或服务器。
命令行参数选项说明如下:

-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数

查看运行参数

jinfo -glags <pid>

jinfo -sysprops <pid>

Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=266338304
-XX:MaxHeapSize=4229955584 -XX:MaxNewSize=1409810432 -XX:MinHeapDeltaByte
s=524288 -XX:NewSize=88604672 -XX:Old
2 Size=177733632 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:
+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+Us
eParallelGC
3 Command line: -javaagent:D:\JavaSoft\ideaIU\lib\idea_rt.jar=62844:D:\Java
Soft\ideaIU\bin -Dfile.encoding=UTF-8

查看内存使用情况

jmap -histo <pid>  | head -20 查找当前进程堆中的对象信息,加上管道符后面的信息以后,代表查询对象数量最多的20个:

jmap -heap <pid>

堆内存dump
jmap -dump:format=b,file=heap.hprof <pid>

查看堆栈信息

jstack <pid>

动态统计监控

jstat -gc <pid> 1000 10 每1000ms采集1次,共采集10次

S0C:第一个幸存区的大小,单位KB
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小(元空间)
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间,单位s
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间,单位s
GCT:垃圾回收消耗总时间,单位s
堆内存统计
jstat -gccapacity <pid>

查看某进程cpu使用情况

top -p <pid>

将线程号转换为16进制
printf "%x\n" <tid>
使用jstack定位线程
jstack <pid>|grep -A 10 <0xtid>

jvm调优常用参数
通用GC参数
-Xmn:年轻代大小 -Xms:堆初始大小 -Xmx:堆最大大小 -Xss:栈大小

-XX:+UseTlab:使用tlab,默认打开,涉及到对象分配问题

-XX:+PrintTlab:打印tlab使用情况

-XX:+TlabSize:设置Tlab大小

-XX:+DisabledExplictGC:java代码中的System.gc()不再生效,防止代码中误写,导致频繁触动GC,默认不起用。

-XX:+PrintGC(+PrintGCDetails/+PrintGCTimeStamps)打印GC信息(打印GC详细信息/打印GC执行时间)

-XX:+PrintHeapAtGC打印GC时的堆信息

-XX:+PrintGCApplicationConcurrentTime 打印应用程序的时间

-XX:+PrintGCApplicationStopedTime 打印应用程序暂停时间

-XX:+PrintReferenceGC 打印回收多少种引用类型的引用

-verboss:class 类加载详细过程

-XX:+PrintVMOptions 打印JVM运行参数

-XX:+PrintFlagsFinal(+PrintFlagsInitial) -version | grep 查找想要了解的命令,很重要

-X:loggc:/opt/gc/log/path 输出gc信息到文件

-XX:MaxTenuringThreshold 设置gc升到年龄,最大值为15

parallel常用参数
-XX:PreTenureSizeThreshold 多大的对象判定为大对象,直接晋升老年代

-XX:+ParallelGCThreads 用于并发垃圾回收的线程

-XX:+UseAdaptiveSizePolicy 自动选择各区比例

CMS常用参数
-XX:+UseConcMarkSweepGC 使用CMS垃圾回收器

-XX:parallelCMSThreads CMS线程数量

-XX:CMSInitiatingOccupancyFraction 占用多少比例的老年代时开始CMS回收,默认值68%,如果频繁发生serial old,适当调小该比例,降低FGC频率

-XX:+UseCMSCompactAtFullCollection 进行压缩整理

-XX:CMSFullGCBeforeCompaction 多少次FGC以后进行压缩整理

-XX:+CMSClassUnloadingEnabled 回收永久代

-XX:+CMSInitiatingPermOccupancyFraction 达到什么比例时进行永久代回收

GCTimeTatio 设置GC时间占用程序运行时间的百分比,该参数只能是尽量达到该百分比,不是肯定达到

-XX:MaxGCPauseMills GCt停顿时间,该参数也是尽量达到,而不是肯定达到

G1常用参数
-XX:+UseG1 使用G1垃圾回收器

-XX:MaxGCPauseMills GCt停顿时间,该参数也是尽量达到,G1会调整yong区的块数来达到这个值

-XX:+G1HeapRegionSize 分区大小,范围为1M~32M,必须是2的n次幂,size越大,GC回收间隔越大,但是GC所用时间越长

G1NewSizePercent 新生代所占最小比例,默认5%

G1MaxNewSizePercent 新生代所占最大比例,默认60%

GCTimeRatio GC时间比例,此值为建议值,G1会调整堆大小来尽量达到这个值

ConcGCThreads GC线程数量

InitiatingHeapOccupancyPercent 启动G1的堆空间占用比例

posted @ 2023-01-16 17:40  a快乐码农  阅读(127)  评论(0编辑  收藏  举报