美文网首页
Linux系统管理

Linux系统管理

作者: 其实我很dou | 来源:发表于2018-01-01 11:14 被阅读0次

    Lunux系统管理

    一. 进程管理

    进程是正在执行的一个程序或者命令, 每个进程都是一个运行的实体, 都有自己的地址空间, 并占用一定的系统资源, 如ls命令, apache服务

    进程管理作用:

    • 判断服务器的健康状态
    • 查看服务器的所有进程
    • 杀死进程

    1. 查看所有进程

    1.1 ps命令

    • ps aux 查看系统中所有进程, 使用bsd操作系统格式
    • ps -le 查看系统中所有进程, 使用linux标准命令格式

    选项含义

    -a : 显示一个终端的所有进程, 除了会话引线
    -u : 显示进程的归属用户及内存的使用情况
    -x : 显示没有控制终端的进程
    -l : 长格式显示, 更加详细的信息
    -e : 显示所有进程
    

    ps命令输出含义

    USER : 产生进程的用户
    PID: 进程id
    %CPU: 占用cpu资源百分比
    %MEM: 占用屋里内容百分比
    VSZ: 占用虚拟内存的大小, 单位kb
    RSS: 该进程占用实际物理内尺寸的大小, 单位kb
    TTY: 该进程是在哪个终端中运行的, 其中tty1-tty7代表本地控制台终端, tty1-tty6是本地字符界面终端, tty7是图形终端, pts/0-255代表虚拟终端, 远程连接, 使用pts
    STAT: 进程状态, 常见状态有
        R: 运行
        S: 睡眠
        T: 停止状态
        s: 包含子进程
        +: 位于后台
    START: 该进程启动时间
    TIME: 该进程占用CPU的运算时间, 不是系统时间
    COMMAND: 产生此进程的命令名
    
    

    1.2. pstree: 查看进程树

    pstree选项含义

    -p: 显示进程的PID
    -u: 显示进程的所属用户
    

    pstree输出

    init─┬─anacron
         ├─auditd───{auditd}
         ├─crond
         ├─dbus-daemon
         ├─dhclient
         ├─httpd───3*[httpd───26*[{httpd}]]
         ├─master─┬─pickup
         │        └─qmgr
         ├─6*[mingetty]
         ├─mysqld_safe───mysqld───20*[{mysqld}]
         ├─redis-server───2*[{redis-server}]
         ├─rsyslogd───3*[{rsyslogd}]
         ├─sshd─┬─3*[sshd───bash]
         │      └─sshd───bash───pstree
         ├─udevd───2*[udevd]
         └─xinetd
    

    1.3 top 任务管理器

    • 选项
    -d: 指定刷新秒数, 默认是3s
    -b: 使用批处理模式输出, 一般和-n选项合用
    -n: 次数, 指定top命令执行的次数
    
    top -b -n 2 >> top.log
    
    • top交互模式下可以执行的命令:
    h: 显示帮助信息
    P: CPU排序(默认)
    M: 内存排序
    N: 以PID排序
    q: 退出top
    
    top命令输出如下:
    top - 09:51:14 up 46 min,  1 user,  load average: 0.00, 0.00, 0.00
    Tasks:  81 total,   1 running,  80 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   1004412k total,   641704k used,   362708k free,    11156k buffers
    Swap:  2031608k total,        0k used,  2031608k free,    74220k cached
    ....
    
    

    • 第一行 任务队列信息
      当前系统时间
      系统运行时间
      登陆用户数
      平均负载(一分钟 五分钟 15分钟的平均负载, 和cpu的核数有关, 四核一般不能超过4)

    • 第二行 进程信息
      tasks: 系统中的总进程数
      running: 正在运行进程数
      sleeping: 睡眠进程
      stopped: 正在停止的进程
      zombie: 僵尸进程, 可能是因为依赖进程被关闭导致

    • 第三行 CPU信息
      us: 用户占用CPU百分比
      sy: 系统占用CPU百分比
      ni: 改变过优先级的用户进程占用百分比
      id: 空闲CPU百分比(重要指标, 一般要大于20%)
      ...

    • 第四行 内存信息
      total: 总共内存大小
      used: 被占用内存大小
      free: 空闲内存
      buffers: 缓冲大小, 加速写入, 比如文件保存时, 可能会先写入buffers中, 然后在写入到硬盘中

    • 第五行 swap交换分区占用情况
      同内存
      cached: 缓存大小, 加速读取, 和buffers作用相反, 读取硬盘数据时, 可以先读入到cached中, 然后在读入内存

    1.4 杀死进程

    • kill
      按照进程号杀死一个进程
      kill -l查看kill支持的信号
        1. SIGHUP 先关闭, 读取配置文件后重启
        1. SIGKILL 强制关闭
    查看apache进程
    ps aux | grep httpd
    root       1986  0.0  0.8 116448  8120 ?        Ss   10:41   0:00 /usr/local/apache/bin/httpd -k start
    web        1987  0.0  0.8 460708  8036 ?        Sl   10:41   0:00 /usr/local/apache/bin/httpd -k start
    web        1988  0.0  0.8 460708  8040 ?        Sl   10:41   0:00 /usr/local/apache/bin/httpd -k start
    web        1989  0.0  0.8 460708  8044 ?        Sl   10:41   0:00 /usr/local/apache/bin/httpd -k start
    root       2072  0.0  0.0 103248   872 pts/0    S+   10:41   0:00 grep --color=auto httpd
    
    读取配置文件重启apache 
    kill -1 1986
    杀死apache
    kill -9 1986
    
    • killall [选项] [信号] 进程名 按照进程名杀死一组进程
      • -i: 交互式, 询问是否要杀死
      • -I: 忽略进程名的大小写

    killall -i -9 httpd

    • pkill [选项][信号] 进程名 按照进程名终止进程
      pkill -1 httpd
      -t 终端号: 按照终端号提出用户

    示例:
    a. 执行w, 会看到三个远程登录终端

    [root@localhost ~]# w
     10:49:07 up  1:44,  3 users,  load average: 0.00, 0.00, 0.00
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.1.103    09:37    0.00s  0.05s  0.00s w
    root     pts/1    192.168.1.103    10:49    4.00s  0.00s  0.00s -bash
    root     pts/2    192.168.1.103    10:49    2.00s  0.00s  0.00s -bash
    
    

    b. 执行pkill -9 -t pts/1踢掉一个登陆终端, 执行
    pkill -9 -t pts/2踢掉另一个

    二. 工作管理

    1. 概述

    工作管理指在单个登陆终端中, 也就是登陆的shell界面中, 同时管理多个工作的行为

    2. 注意事项

    • 当前登录终端, 只能管理当前终端的工作, 而不能管理其他登陆终端的工作
    • 放入后台的命令必须是持续运行一段时间, 这样才可以捕捉和操作这个工作
    • 放入后台执行的命令不能和前台用户有交互或者需要前台输入, 否则放入后台只能暂停, 而不能停止

    3. 工作管理方法

    • & 符号 放在后台运行
      如: tar -zxvf etc.tar.gz /etc &
      将解压命令放入当前登陆终端后台运行, 管理当前终端, 也会结束

    • ctrl+z快捷键, 放在后台暂停

    • 查看后台工作
      jobs[-l]
      -l : 显示工作的PID,
      +号表示最近一个放入后台的工作, 也是工作恢复时, 默认恢复的工作
      -号代表倒数第二个放入后台的工作

    [root@localhost ~]# jobs -l
    [1]   2124 Running                 /usr/local/mysql/bin/mysqld_safe --user=mysql &
    [2]-  2366 停止 (tty 输出)     top
    [3]+  2367 停止 (tty 输出)     top
    [root@localhost ~]# 
    
    • 将后台工作恢复到前台执行
      fg %工作号
      其中:%工作号: %号可以省略, 工作号和PID不一样
      如:fg %1

    • 将后台暂停的工作恢复到后台执行
      fg %工作号

    // 查看工作任务
    [root@localhost ~]# jobs
    [1]   Running                 /usr/local/mysql/bin/mysqld_safe --user=mysql &
    [2]-  Stopped                 top
    [3]+  Stopped                 top
    
    
    //将mysql恢复到前台
    [root@localhost ~]# fg %1
    /usr/local/mysql/bin/mysqld_safe --user=mysql
    
    // 终端阻塞
    
    // 按下ctrl+z
    ^Z
    [1]+  Stopped                 /usr/local/mysql/bin/mysqld_safe --user=mysql
    
    // 查看工作计划, mysql处于暂停状态
    [root@localhost ~]# jobs
    [1]+  Stopped                 /usr/local/mysql/bin/mysqld_safe --user=mysql
    [2]   Stopped                 top
    [3]-  Stopped                 top
    
    // 将其放入后台执行
    [root@localhost ~]# bg %1
    [1]+ /usr/local/mysql/bin/mysqld_safe --user=mysql &
    [root@localhost ~]# 
    
    

    **把命令放入后台, 只能在当前登录终端执行, 一旦关闭当前登录终端, 会向系统发送SIGHUB信号, 结束当前登录终端后端运行的所有进程, 如何使后台命令脱离终端运行呢? **

    4 后台命令脱离终端

    • 第一种方法, 把需要执行的命令加入到/etc/rc.local文件中
    • 第二种方法是使用定时任务, 让系统在指定的时间执行某个后台命令
    • 第三种方法是使用nohup命令

    nohup 命令 &

    三. 系统资源查看

    1. vmstat命令系统资源查看

    vmstat[刷新延时 刷新次数]
    如: vmstat 1 3

    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     1  0      0 686688  14496 211932    0    0    23     2   42   73  0  0 100  0  0   
     0  0      0 686648  14496 211952    0    0     0     0   45   67  0  1 99  0  0    
     0  0      0 686648  14496 211952    0    0     0     0   37   66  0  0 100  0  0   
    
    • procs: 进程信息字段
      • -r: 等待运行的进程数, 数量越大, 系统越忙
      • -b: 不可被唤醒进程数量, 数量越大, 月繁忙

    • memory(kb)
      • swpd: 虚拟内存的使用情况
      • free: 空闲内存容量
      • buff: 缓冲内存容量
      • cache: 缓存的内存容量

    缓存是用来加速数据从硬盘读取
    缓冲时用来加速数据写入硬盘
    通过内存实现buffer和cache功能


    • swap: 交换分区
      • si: 从磁盘中交换到内存中数据的数量, kb
      • so: 从内存中交换到磁盘中数据的数量, kb
        数值越大, 表示数据经常要在磁盘和内存之间交换, 系统性能越差

    • io: 磁盘读写信息字段
      -bi: 从块设备读入数据的总量, 单位块
      -bo: 写到块设备的数据的总量, 单位块
      数字越大, 系统的I/O越繁忙

    • system: 系统信息
      • in: 每秒被终端的进程次数
      • cs: 每秒钟进行的事件切换次数,
        数值越大, 代表系统和接口设备通信非常繁忙

    • CPU: CPU信息
      • us: 非内核进程消耗CPU运算时间百分比
      • sy: 内核消耗
      • id: 空闲CPU百分比
      • wa: 等待I/O消耗
      • st: 虚拟机盗用CPU百分比

    2. dmesg开机时内核检测

    dmesg | grep CPU

    3. free查看内存使用情况

    • free [-b|-k|-m|-g]
    • 选项
      • -b: 字节显示
      • -k: kb显示(默认)
      • -m: Mb显示
      • -g: GB显示
    [root@localhost ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:           980        310        670          0         14        206
    -/+ buffers/cache:         89        891
    Swap:         1983          0       1983
    

    显示字段含义

    • 第一行
      • total总内存数,
      • used: 已使用
      • free空闲
      • shared: 多个进程共享
      • buffers: 缓冲内存数
      • cached: 缓存内存数, kb
    • 第二行
      • -/buffers/cache的内存数
    • 第三行
      total是swap的总数, kb

    4. 查看CPU信息

    cat /proc/cpuinfo

    5. 查看系统平均负载和启动时间

    uptime

    6. uname -a 查看linux版本

    7. 列出进程打开或者使用的文件信息

    lsof[选项]
    选项

    • -c 字符串: 只列出以字符串开头的进程打开的文件
    • -u 用户名: 只列出某个用户的进程打开的文件
    • -p pid: 列出某个PID进程打开的文件
    lsof | more
    lsof /sbin/init 查询某个文件被哪个进程调用
    lsof -c httpd 查看httpd进程调用了那些文件
    lsof -u root 按照用户名, 查询某个用户进程调用的文件名
    

    相关文章

      网友评论

          本文标题:Linux系统管理

          本文链接:https://www.haomeiwen.com/subject/dcftnxtx.html