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支持的信号-
- SIGHUP 先关闭, 读取配置文件后重启
-
- 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 按照用户名, 查询某个用户进程调用的文件名