Linux系统管理

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系统管理)