java工程师面试应该了解的Linux知识点

                                                      Linux知识点总结如下,在日常生产操作和面试中会涉及到

1.常见的Linux的发行版本有哪些:

     答:ubunt CentOS redhat等

2.切换用户的命令: su lizhi切换到lizhi用户(不需要输入密码)  su root 切换到root用图画(需要输入密码)

3.修改用户密码:passwd lizi 修改lizhi用户的密码

4.测试当前系统与指定IP地址系统的网络连接状态: ping  IP地址   crul httpXXX 测试url地址

5.目录切换:cd /etc/lizhi/test/

6.切换到上一层目录:cd ..

7.切换到系统根目录:cd /

8.切换到用户主目录(root目录下):cd ~

9.创建文件夹命令:mkdir 文件夹名称

10.查看文件夹(目录)的命令:

     ls 文件夹名:查看该文件夹下的所有目录和文件(不包含隐藏)

     ls -a 文件夹名:查看该文件夹下所有文件和目录 包含隐藏文件

     ll 文件夹名:查看该文件夹下所有的目录和文件的详细信息(不包含隐藏)

11.修改文件夹 文件 压缩包名称:mv 旧名称  新名称

12.移动文件夹 文件 压缩包等所使用的命令:mv 文件名称  文件的新位置

13.拷贝文件 文件夹 压缩包:cp 文件 文件新位置

14.删除文件文件夹 压缩包:rm -rf 文件名称

15.创建一个文件:touch 文件名称

16.查看文件:cat 文件名

17.vi(vim)文本编辑器有三种工作模式:命令行模式 插入模式 和底行模式,其中新系统需要自己安装vim才可使用 vim编辑器

    命令行模式:最初进入的一般模式,该模式下可以移动光标进行浏览,删除整行(dd) 复制整行(yy,6yy表示复制6行),粘贴(p),但是无法编辑文字。

    插入模式:可使用i键从命令行模式切换到插入模式,只有在该模式下,用户可编辑文件,可使用[esc]键返回命令行模式

     底行模式:通过“:”从命令行返回到底行模式,在该模式下,可对文件保存w 退出q 可设置编辑环境,如寻找 列出行号,:wq保存并退出   :q!表示强制退出

18.修改一个文件命令(vi文本编辑器)

      1.输入命令vim 文件名 打开文件  进入到命令行模式,按键盘i进入插入模式进行编辑

      2.编辑完后 按esc键退出插入模式 进入命令行模式

     3.输入:进入底行模式  输入wq 保存并退出

19.将 /lizhi 目录下的所有文件和目录打包并压缩成一个temp.tar.gz文件:tar cvzf temp.tar.gz /lizhi

20.将XXX.tar.gz文件解压到user目录下:tar xvzf xxx.tar.gz /user

21.安装名字为tftp软件:rpm -ivh tftp.rpm

22.显示当前目录的绝对路径:  pwd

23.查看当前系统网络信息:ifconfig

24.配置eth0这一网卡的IP为192.168.0.1:ifconfig eth0 192.168.0.1

25.暂停etho网卡工作:ifconfig eth0 down

26.恢复eth0网卡:ifconfig eth0 up

27.系统中的每一个文件或者目录的访问权限分为 可读 可写 可执行。每一个文件或者目录的访问权限独有三组,可读 可写 可执行,当使用ls -l命令显示文件或者目录的详细信息时,最左边的一列为文件的访问权限 如:ls -l sobsrc.tgz 显示为-rw-r--r--1 root root 483997 Jun1 15 17:31 sobsrc.tgz  r为可读 w为科协 x表示可执行,横线代表无该项权限。

27.chmod 761 hello.c 表示hello.c文件的访问权限是什么:

     chmod 761 hello.c  <--> chmod 111110001 hello.c

      文件所有者对hello.c文件可读 可写 可执行,与所有同组的用户对其可读写执行,系统用户不可读写 可执行

28.项目开发中 为了方便操作 会把经常用到的文件或者目录设置为可读 科可写 可执行,:chmod 777 hello.c

29.Linux上安装软件:安装jdk mysql tomcat 

30.远程连接Linux的工具:secureCRT SSHSecure  mobaXterm

31.安装jdl的步骤:

    1.查看Linux是否安装了jdk:  rmp -qa|grep java

    2.卸载两个OpenJDK :rmp -e --nodeps 要写在的软件

   3.上传jdk到Linux

   4.安装jdk运行需要的插件 yum install glibc.i686

   5.解压jdk到/usr/local下  首先保证是在目录为/ 

        tar –xvf jdk-7u71-linux-i586.tar.gz –C /usr/local(有滚动条)

        或者:tar –zxvf jdk-7u71-linux-i586.tar.gz –C /usr/local(有滚动条)

        或者:tar –zxf jdk-7u71-linux-i586.tar.gz –C /usr/local(没有滚动条)

  6.改名字 rm jdk_1.7.0_71 jdk1.7

   7.配置环境变量 打开/etc/profile配置文件,拷贝文件

       vim /etc/profile   按i进入插入模式。复制如下:

        然后保存即可

#set java environment

JAVA_HOME=/usr/local/jdk1.7.0_71

CLASSPATH=.:$JAVA_HOME/lib.tools.jar

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME CLASSPATH PATH 

    7)重新加载/etc/profile配置文件 source /etc/profile  :source /etc/profile

    8) 输入java-version查看是否安祖航成功 至此安装完成。

    

32. 安装mysql步骤:

      

1.查看Linux自带的mysql:rpm -qa|grep mysql
2.卸载自带的mysql:rpm -e--nodeps mysql-libs-5.1.73-3.el6_5.i686
3.上传mysql到Linux
4.安装mysql依赖 yum -y install libaio.so.1 libgcc_c.so.1 libstdc++.so.6
               yum update libstdc++-4.4.7-4.el6.x86_64
5.解压mysql到/usr/local/下的mysql目录(mysql目录需要自己手动创建)
   cd /usr/local
   mkdir mysql
   tar -xvf MySQL-5.6.22-1.el6.i686.rpm-bundle.tar -C /usr/local/mysql 
6.在/usr/local/mysql下安装mysql 
     安装服务器端:rpm -ivh MySQL-server-5.6.22-1.el6.i686.rpm
     安装客户端:rpm -ivh MySQL-client-5.6.22-1.el6.i686.rpm
7.启动mysql
  service mysql start(这种放肆每次都要启动一次,不推荐)
   加入到系统服务中并开机启动
   加入到系统服务:chkconfig -add mysql
   自动启动:chkconfig musql on
8.登录mysql
  mysql安装后会生成一个随机木马,存储在/root/.mysql_secret 查看该文件,会有
   the random password set for the root user at XXX(localtime):XXXX 这里就是密码
   mysql -u root -p
   输入找到的密码 会报错,因为我们刚只是设置了自动启动,还没启动mysql
   需要再次输入 service mysql start
9.修改密码:
   set password = password('root')  root为新密码
10.开启mysql远程登录
   默认情况下mysql为安全起见,不支持远程登录,所以需要手动开启远程登录权限,登录mysql后输入如下命令: grant all privileges on *.* to 'root' @'%' identified by 'root';
      fulsh privileges;
11 开放Linux的对外访问端口3306
   /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

   /etc/rc.d/init.d/iptables save ---将修改永久保存到防火墙中
    注意:你想开放哪个端口 就把3306处给替换一下

33 安装tomcat

1.上传tomcat到Linux下
2.解压tomcat到/usr/local文件夹下:tar -xvf apache-tomcat-7.0.57.tar.gz -C /usr/local
  进入到解压文件所在的目录。看到解压成功,但是这个名字太长 改个名字:
  cd /usr/local
  ls   看到了apache-XXXX很长的名字
  mv apache-XXX/ tomcat :改名字
3.启动tomcat
  进入tomcat的bin下启动 ./startup.sh
  这样tomcat就启动成功,但是也许可能访问不成功,因为防火墙把8080给挡住了,
4.开放8080端口,并添加到防火墙中
    /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

    /etc/rc.d/init.d/iptables save
5.再次访问 成功

附:
  如何关闭Linux的防火墙
 关闭防火墙:service iptables stop
 永久关闭防火墙:chkconfig iptables off
 开启防火墙:service iptables start


关闭tomcat:进入到/bin下面 ./shutdown.sh 即可


启动tomcat: bin下的./startup.sh
关闭tomcat: bin下的 ./shutdown.sh

33 各类其他的操作汇总:

2.文件的操作

  pwd 显示当前所在的路径

  mkdir filename 创建文件夹

  mkdir -p /a/b 创建嵌套的目录

  touch filename 创建文件

  cp filename new_filename  复制文件

  mv filename path 移动文件(如果路径中带文件名,则会给文件重命名)

  rm -r filename 删除文件或者文件夹,(-r是递归的意思)

  rm -f 强制删除目录或文件

  rmdir filename 删除文件夹(只能是空文件夹)

  find / -name "install.log“ 查找  可以用*作为通配符;

1.修改文件操作权限  

  chmod u+x filename 给所属用户增加执行的权限

  chmod g-w filename 给组减少写的权限

  chmod o+w filename 给其他用户增加写的权限

  chmod 777 filename 给所属用户,所属组,其他用户开放所有权限;

3. 日常维护用的命令

  1.找到服务器对应的进程 ps -ef |grep "tomcat" 这样就能知道服务器所对应的进程,以及服务器安装的目录。

  2.关闭服务器可以用kill -9 pid 杀死进程。也可以到tomcat的bin目录下./shutdown.sh。开启服务器./startup.sh

  3.用winscp,上传修改后的文件。

  4.日志查看,tail -200f catalina.out  显示日志的最后200行。ctrl+c 退出查看;


 find /path -type d |wc -l 统计某路径下文件夹的个数

  find /path -type f | wc -l 统计某路径下文件的个数

  cat 查看文件内容

  wc -lwc filename 统计文件的行数,字符数,字节数  l表示行数,w表示字符数,c表示字节数

  > 覆盖式输出重定向符 >>追加式输出重定向符

  vi filename 对文件进行编辑。

  vi有三种模式,分别是命令模式、插入模式和末行模式。

  默认进入命令模式,其他模式按esc也可进入命令模式

      Page Down 或Ctrl+F  下翻一页

      Page Up 上翻一页

      Home或^ 或0  跳至行首

      End 或$    跳至行尾

      1G 或 gg  跳至首行

      G  跳至尾行

      #G  跳至第#行

      :set nu   示行数

      :set nonu  显示行数

      x或del  删除光标处的单个字符

      dd  删除当前行

      #dd  删除当前行开始的#行

      d^  删除当前行首至光标的字符

      d$  删除当前行尾至光标的字符

      yy  复制当前行

      #yy  复制当前行开始的#行

      p  粘贴至光标的右侧

      P  粘贴至光标的左侧

      /word  向下查找字符串word

      ?word  向上查找字符串word

      n  光标定位至下一个匹配字符

      N  光标定位至上一个匹配字符

      u  单次撤销 多次恢复

      U  撤销所有编辑

 

  插入模式:命令模式下,i 、a、o、 Insert即可进入。该模式可用于编辑文本

  末行模式:shit+: 即可进入

         :w   保存文件 

         : /filename   另存文件为fielname

        :q  未修改时退出

        :q!  不保存且强制退出

        :wq  保存修改并退出

         :s /old/new  前行的第一个old替换为new

        :s /old/new/g  前行的所有old替换为new

        :#,# s /old/new/g    #行间的所有old替换为new

        :% s /old/new/g  当前文件所有old替换为new

        :s /old/new/c   old替换为new时提示确认替换

        :g/str1/s//str2/g  str2 替换所有的str1

34 docker 安装mysql tomcat jdk的操作:

     

1.docker 安装mysql 
  1.1 先从镜像仓库拉取mysql的镜像文件:docker pull mysql:5.6
  1.2 启动一个容器:docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/data:/var/lib/mysql -v $PWD/logs:/logs --name test_mysql mysql:5.6
    参数说明 
    -d 让容器在后台运行 
    -p 3306:3306 将容器的 3306 端口映射到主机的 3306 端口
    -e 设置环境变量,这里是设置mysql的root用户的初始密码,这个必须设置 
    -v $PWD/conf:/etc/mysql/conf.d 将主机当前目录下的 conf/my.cnf 挂载到容器的         
       /etc/mysql/my.cnf
    -v $PWD/data:/var/lib/mysql 将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 
    -v $PWD/logs:/logs 将主机当前目录下的 logs 目录挂载到容器的 /logs
    –name 容器的名字,随便取,但是必须唯一
   1.3 通过命令docker ps -l 查看刚刚创建的容器
   1.4 进入刚刚创建的容器中:docker exec -it test_mysql /bin/bash
       参数说明:-i 对容器进行标注输入进行交互 -t 在容器里产生伪终端
      容器里没有vim 得先安装vim 安装前需要先执行apt update命令,不然会报错,
        1.4.1 apt-get update 作用:同步/etc/apt/sources.list和/etc/apt/sources.list.d中列出来的源索引,这样才能获取到最新的软件包
        1.4.2:apt-get install vim
   1.5 进入到刚创建的容器中,docker exec -it test_mysql /bin/bash
        通过上面步骤中的-e MYSQL_ROOT_PASSWORD设置root账户的初始登录密码登录mysql
        查看默认的用户访问设置
        如上则可以在主机上直接通过mysql -h 127.0.0.1 -u root -p 连接mysql了

       设置远程访问授权等信息
   mysql -u root -p
   grant all privileges on *.* to root@"%" identified by "123456" with grant option;
   ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'
  flush privileges;

   取消mysql查询大小写问题
  进入docker的mysql容器,编辑/etc/mysql/mysql.conf.d/mysqld.cnf文件 在[mysqlId]下添加如下:
   [mysqlId]
    lower_case_table_names=1
   保存并退出容器;执行sudo docker restart mysql 重启mysql即可查看

解决Mysql5.7的查询兼容问题。此设置重启失效。
如:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
MySQL 5.7.5和up实现了对功能依赖的检测。如果启用了only_full_group_by SQL模式(在默认情况下是这样),那么MySQL就会拒绝选择列表、条件或顺序列表引用的查询,这些查询将引用组中未命名的非聚合列,而不是在功能上依赖于它们。(在5.7.5之前,MySQL没有检测到功能依赖项,only_full_group_by在默认情况下是不启用的。

解决方案1:

set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';


解决方案2(写配置文件,重启不失效。去除NO_ZERO_IN_DATE,NO_ZERO_DATE,解决时间戳的问题):

进入docker的MySQL容器,编辑/etc/mysql/mysql.conf.d/mysqld.cnf文件,在[mysqld]下添加如下:

sql-mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'


解决Mysql5.7的密码修改不兼容问题

ysql5.7更改密码,以前的方式会报错。代码如下:

update mysql.user  set password=password('root') where user='root'

提示ERROR 1054 (42S22): Unknown column 'password' in 'field list'

最新的更改密码代码是:

update mysql.user set authentication_string=password('root') where user='root' 



启动docker中 MySQL的时候可以加参数。含义是:
-restart=always 跟随docker启动
--privileged=true 容器root用户享有主机root用户权限
-v 映射主机路径到容器
-e MYSQL_ROOT_PASSWORD=root 设置root用户密码
-d 后台启动
--lower_case_table_names=1 设置表名参数名等忽略大小写
--------------------- 

  
docker 安装tomcat
1. docker pull tomcat:8.5-jre10-slim进行拉取,完成后输入命令查看docker images查看系统中的所有 
  docker镜像。
2. 输入命令运行一个容器:docker run -it -d -p 7899:8080 tomcat:8.5-jre10-slim

    -t 选项让Docker分配一个伪终端( pseudo-tty)并绑定到容器的标准输入上, 
    -i 则让容器的标准输入保持打开。
    -p 表示端口号,前一个7890是指我们访问tomcat时的端口号(宿主机端口),
       后一个8080是tomcat启动的一个容器在docker中运行的端口号,
       指定端口号为了更明确的访问tomcat。
       输入命令docker ps查看正在运行的容器发现状态是Up表示正在运行
3. 查看tomcat是否启动,输入宿主机IP+端口号:http://192.168.182.129:7899/访问结果如下
4. 这时候一个tomcat进程就启动了,如何向其中部署项目,就需要对容器对应的镜像进行构造,将编译后的文件或.war文件上传到镜像的webapps目录下。还有springboot项目在docker中的部署。在后续内容中会分享
docker安装jdk
1.查找jdk镜像:docker search jdk
2.下载openjdk镜像:docker pull openjdk
3.运行jdk容器:docker run -d -it --name myopenjdk openjdk /bin/bash
  注意: -it   /bin/bash  一定不能省了,不然jdk起不来,或者懒人写法 -it  bash  也可以。
4.进入容器:docker exec -it myopenjdk /bin/bash



或者:
解压到指定目录

tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local/

配置环境变量 
使用vi 也可以使用vim 
vi /etc/profile

jdk8
JAVA_HOME=/usr/local/jdk8 
JRE_HOME=/usr/local/jdk8/jre 
CLASS_PATH=.:JAVAHOME/libPATH=JAVAHOME/libPATH=JAVA_HOME/bin:JREHOME/bin:JREHOME/bin:PATH 
export PATH CLASS_PATH

刷新配置文件 
source /etc/profile 

配置完成 也可以根据容器提交成新的镜像,以便下次使用方便。 
docker commit m=”centos7-jdk8” 基础镜像id tag

docker images 就可以看到新生成的镜像了。


35 性能分析:

    

性能分析:
1 vmstat: 虚拟内存统计
  用法: vmstat [options] [delay[count]]
   Usage:
 vmstat [options] [delay [count]]

Options:
 -a, --active           active/inactive memory
 -f, --forks            number of forks since boot
 -m, --slabs            slabinfo
 -n, --one-header       do not redisplay header
 -s, --stats            event counter statistics
 -d, --disk             disk statistics
 -D, --disk-sum         summarize disk statistics
 -p, --partition   partition specific statistics
 -S, --unit       define display unit
 -w, --wide             wide output
 -t, --timestamp        show timestamp

 -h, --help     display this help and exit
 -V, --version  output version information and exit
    其中

    r : 运行和等待 CPU 时间片的进程数。若该值大于系统 CPU 个数,则说明 CPU 不足
    b : 表示等待资源的进程数
    swpd : 切换到内存交换区的内存大小(单位 KB)
    free: 空闲的物理内存的大小,我的机器内存总共2G,剩余92M。
    buff: Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存
    cache:直接用来记忆我们打开的文件,给文件做缓冲,把空闲的物理内存的一部分拿来做文件和目录的缓    
         存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用
    si:每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗 
        内存进程解决掉。
    so:每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
    bi:块设备每秒接收的块数量(读磁盘)(kb/s)
    bo:块设备每秒发送的块数量(写磁盘)(kb/s)
    in:每秒CPU的中断次数,包括时间中断
    cs:每秒上下文切换次数。
    us:用户进程消耗 CPU 时间百分比
    sy:内核进程消耗 CPU 时间百分比,sy 的值较高时,则说明内核消耗的 CPU 资源很多
    id:空闲 CPU 时间百分比
    wt:IO 等待 CPU 时间百分比

2.free 内存使用状况
   free -h  free -m free -g free -h 2  free -h -s 2  
3.uptime 统计当前系统的运行情况
4.netstat 当前网络信息
  用法:usage: netstat [-vWeenNcCF] [] -r         netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [ ...]
       netstat { [-vWeenNac] -I[] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] }     
 [delay]

        -r, --route              display routing table
        -I, --interfaces= display interface table for 
        -i, --interfaces         display interface table
        -g, --groups             display multicast group memberships
        -s, --statistics         display networking statistics (like SNMP)
        -M, --masquerade         display masqueraded connections

        -v, --verbose            be verbose
        -W, --wide               don't truncate IP addresses
        -n, --numeric            don't resolve names
        --numeric-hosts          don't resolve host names
        --numeric-ports          don't resolve port names
        --numeric-users          don't resolve user names
        -N, --symbolic           resolve hardware names
        -e, --extend             display other/more information
        -p, --programs           display PID/Program name for sockets
        -o, --timers             display timers
        -c, --continuous         continuous listing

        -l, --listening          display listening server sockets
        -a, --all                display all sockets (default: connected)
        -F, --fib                display Forwarding Information Base (default)
        -C, --cache              display routing cache instead of FIB
        -Z, --context            display SELinux security context for sockets

  ={-t|--tcp} {-u|--udp} {-U|--udplite} {-w|--raw} {-x|--unix}
           --ax25 --ipx --netrom
  =Use '-6|-4' or '-A ' or '--'; default: inet
  List of possible address families (which support routing):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
    x25 (CCITT X.25)
    其中

    -a (all)显示所有选项,默认不显示LISTEN相关
    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字
    -l 仅列出有在 Listen (监听) 的服務状态
    -p 显示建立相关链接的程序名
    -r 显示路由信息,路由表
    -e 显示扩展信息,例如uid等
    -s 按各个协议进行统计
    -c 每隔一个固定时间,执行该netstat命令。
        提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到


5.top:监控Linux系统状态 如cpu 内存使用
    其中

    第一行:
    14:36:14 当前系统时间
    days, 4:43 系统已经运行了2天4小时43分钟(在这期间没有重启过)
    1 users 当前有1个用户登录系统
    load average: 0.00, 0.01, 0.05 ,后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load     
       average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻    
       辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
    第二行:Tasks 任务(进程),
    系统现在共有10个进程,其中处于运行中的有2个,108个在休眠(sleep),stoped状态的有0个,    
     zombie状态(僵尸)的有0个。
    第三行:cpu状态
    us 用户空间占用CPU的百分比
    sy 内核空间占用CPU的百分比
    ni 改变过优先级的进程占用CPU的百分比
    id 空闲CPU百分比
    wa IO等待占用CPU的百分比
    hi 硬中断(Hardware IRQ)占用CPU的百分比
    si 软中断(Software Interrupts)占用CPU的百分比
    第四行:内存状态
    total 物理内存总量
    free 空闲内存总量
    used 使用中的内存总量
    buff/cache 缓存的内存量
    第五行:swap交换分区
    total 交换区总量
    free 空闲交换区总量
    used 使用的交换区总量
    avail Mem 缓冲的交换区总量
    第六行:各进程(任务)的状态监控
    PID 进程id
    USER 进程所有者
    PR 进程优先级
    NI nice值。负值表示高优先级,正值表示低优先级
    VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    SHR 共享内存大小,单位kb
    S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
    %CPU 上次更新到现在的CPU时间占用百分比
    %MEM 进程使用的物理内存百分比
    TIME+ 进程使用的CPU时间总计,单位1/100秒
    COMMAND 进程名称(命令名/命令行)

6.监控java线程数:ps -elf grep java wc -1
7.监控网络客户连接数:netstat -n grep tcp grep 侦听端口 wc -1
8.dmesg | tail :该命令会输出系统日志的最后10行。示例中的输出,可以看见一次内核的oom kill。这些    
                日志可以帮助排查性能问题。千万不要忘了这一步。
9.mpstat -P ALL 1:该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。
10.pidstat 1 :pidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见两个JAVA进程占用了将近1600%的CPU时间,既消耗了大约16个CPU核心的运算资源。
11. iostat -xz 1:r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。
await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。
avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。
%util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。
如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。

 

你可能感兴趣的:(Linux,Linux基本操作,docker,jdk,mysql,tomcat)