进程和线程
进程process和线程threads的概念
process 用户空间进程 内核空间进程
pstree -pa tom1 查看用户tom1 执行的命令
ps -eo pid,lstart,etime,cmd |grep nginx
VSZ 物理内存+共享内存
RSS 物理内存
COMMAND 【】 内核进程 / 用户进程
STAT
D //无法中断的休眠状态(通常 IO 的进程);
R //正在运行可中在队列中可过行的;
S //处于休眠状态;
T //停止或被追踪;
W //进入内存交换 (从内核2.6开始无效);
X //死掉的进程 (基本很少见);
Z //僵尸进程;
< //优先级高的进程
N //优先级较低的进程
L //有些页被锁进内存;
s //进程的领导者(在它之下有子进程);
l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ //前台进程;
ni: nice值
pri: priority 优先级
rtprio: 实时优先级
psr: processor CPU编号
###########
并发,通过时间片来分片执行
并行,多核执行
进程是执行中的程序
进程(代码就是二进制程序,数据,进程空间就是内存空间,打开的文件)
进程=公司 线程=员工
进程-》子进程
物理地址空间===物理内存大小
虚拟地址空间===
cat /proc/1730/status #查看pid号的文件状态
ll /proc/1730/exe #查看进程启用的程序
ll /proc/1730/fd #查看打开的文件
##############
memory leak内存泄露 程序申请了内存空间,一直占用不释放,导致别的进程不能使用
memory overflow内存溢出 程序申请了10M空间,但是写入了20M空间,会占用别的进程的空间
oom out of memory 内存不足
孤儿进程
父进程先退出,子进程会成为孤儿进程,这是孤儿进程会被PID=1的systemd进程收养,成为systemd的子进程
孤儿进程会继续执行
LRU算法
从上往下排列使用内存位置,如果有新的调用数据,就会把最下边的位置给挤掉,以此类推
#如果重新调用下边位置的数据,会重新移动的最上边
进程间的通信
同一主机的方法
pipe文件 单工文件,写入的时候直接写进内存中,读取的时候直接从内存中读 #进程通讯的文件 mkfifo
socket文件 双工
memory-maped file 文件映射,将文件中的一段数据映射到物理内存,多个进程共享这片内存
shm shaer memory 共享内存
signal 信号
lock 加锁
semaphore 信号量,一种计数器
不同主机的方法 socket=ip+端口号
RPC 远程默认调用
MQ 消息队列,生产者和消费者 如kafka,RabbitMQ,activeMQ
优先级
0-99 实时进程
100-139 非实时进程
nice -20对应100;19对应139
查看优先级#ps axo pid,cmd,nice
调整优先级#renice -n -10 5687
当0优先级的进程时间片到时,会放到就绪队列里,等到0优先级的运行队列执行完,会把0就绪队列的拿出来放到运行队列,都执行完会把1运行队列拿到0队列,以此类推
0-139运行队列按优先级分类
0-139就绪队列按优先级分类
[root@centos8-node2 tmp]# ps axo pid,cmd,nice
...
5687 ping 127.0.0.1 0
5688 ps axo pid,cmd,nice 0
[root@centos8-node2 tmp]# renice -n -10 5687
5687 (process ID) old priority 0, new priority -10
[root@centos8-node2 tmp]# ps axo pid,cmd,nice
...
5687 ping 127.0.0.1 -10
5690 ps axo pid,cmd,nice 0
性能工具
buffer 写入优势 cache 读取优势
pstree -p 进程工具
pstree -u 进程工具
ps -efT | ps auxf
ps -T -p pid //列出了由进程号为 pid 的进程创建的所有线程
prtstat $pid #详细信息
pmap 689 查看占用的内存空间
pgrep ssh 查看服务pid
pgrep -au root
pidof 查看服务pid
mpstat 2
top -H -p 121 #显示pid123的线程信息
ps -T -p $pid
iotop 磁盘工具
iftop 网络工具
nload 网络工具
nethogs 网络工具
iptraf-ng 网络工具
time 查看命令运行时长 time(ls)
dstat 系统统计
ab -c 1000 -n2000 -c 并发数 -n 用户数 页面测试
lsof进程查看
lsof -c sshd #查看ssh正在使用的文件和网络连接
lsof -u root #查看root正在使用的文件和网络连接
lsof -p 10840 #查看进程打开的文件
lsof -t -c sshd #只显示进程号
lsof -i :22 #查看端口22打开的文件
web管理界面
dnf install -y cockpit
systemctl enable --now cockpit
192.168.1.12:9090 登录web
pmap
查看进程在内存的运行空间
[root@cenots8 etc]# pmap 15078
15078: nginx: master process /usr/sbin/nginx
0000565017aaf000 1048K r-x-- nginx
0000565017db4000 8K r---- nginx
0000565017db6000 108K rw--- nginx
0000565017dd1000 128K rw--- [ anon ]
...
total 119180K
信号kill
0) 检查服务状态 #kill -0 3309;echo $? killall -0 mysql;echo $?
1) 重新加载文件 #例 kill -1 $pid
1) SIGHUP 无须关闭进程而让其重读配置文件
2) SIGINT 中止正在运行的进程;相当于Ctrl+c
3) SIGQUIT 相当于ctrl+\
9) SIGKILL 强制杀死正在运行的进程,可能会导致数据丢失,慎用!
15) SIGTERM 终止正在运行的进程,默认信号
18) SIGCONT 继续运行
19) SIGSTOP 后台休眠
fg 投到前台终端
bg 投到后台
ping 127.1&ping 127.2 同时执行