正式班D21
2020.11.03星期二 正式班D21
目录
11.5 源码包
11.5.1 预先安装编译安装依赖的库
-
安装编译器
-
安装解释器
[root@ccc ~]# yum groupinstall -y "开发工具" [root@ccc ~]# yum -y install gcc gcc-c++ autoconf automake make [root@ccc ~]# yum -y install gcc gcc-c++ autoconf automake make
11.5.2 官网下载源码包
-
浏览器下载
-
或者执行命令
[root@ccc ~]# cd /root [root@ccc ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
11.5.3 解压、编译、编译安装
-
解压
[root@ccc ~]# tar xvf nginx-1.18.0.tar.gz -C /tmp/ [root@ccc ~]# cd /tmp/nginx-1.18.0/
-
配置
[root@ccc nginx-1.18.0]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-http_gzip_static_module --with-http_sub_module
# 1、如果报错,先执行make clean all,再重新执行配置操作 # 2、--prefix指定安装目录,/usr/local/nginx是安装目录 # 3、带ssl stub_status模块 添加steam模块 -with-stream,能传输tcp协议 # 4、http_stub_status_module 状态监控 # 5、http_ssl_module 配置https # 6、stream 配置tcp的转发 # 7、http_gzip_static_module 压缩 # 8、http_sub_module 替换请求
-
编译安装
[root@ccc nginx-1.18.0]# make && make install
-
清理安装包
[root@ccc nginx-1.18.0]# rm -rf /tmp/nginx-1.18.0/
-
将程序设定软链接,便于后续升级
[root@ccc ~]# ln -s /usr/local/nginx/ /soft/nginx [root@ccc ~]# ll /soft/ 总用量 0 lrwxrwxrwx 1 root root 17 11月 3 15:24 nginx -> /usr/local/nginx/
-
启动测试
[root@ccc nginx-1.18.0]# useradd www [root@ccc nginx-1.18.0]# /usr/local/nginx/sbin/nginx 打开浏览器:输入服务器的IP地址,可以看到欢迎界面
-
总结
# ./configure --prefix=/usr/local/nginx 1、指定安装路径,例如--prefix=DIR 2、启用或禁用某项功能,例如--enable-ssl,--disable-filter --with-http_ssl_module 3、和其他软件关联,例如--with-pcre=/root/pcre-8.31 4、检查安装环境,例如是否有编辑器gcc,是否满足软件的依赖需求 5、最终生成:MAkefile # make # 按Makefile文件编辑,可以使用-j 2指定两颗CPU编译 # make install # 安装 如果中途发生错误,多半是因为缺少必要的库的支持,先清理 # make clean all # 清理以前编译后产生的*.o目标文件 然后安装依赖库,重新执行三部曲
12 进程管理
12.1 进程概念
12.1.1 什么是进程?
-
程序:存放代码的文件-->静态
进程:程序的运行过程-->动态(进程是操作系统最核心的概念)
操作系统控制着硬件去执行程序的过程
-
并发:多个任务看起来是同时运行的
并行:多个任务是真正的同时运行,只有多核才能实现并行
-
线程:进程内代码的执行过程,一个进程至少有一个线程
线程才是CPU的执行单位
Tips:CPU是运行代码,不是做I/O的
-
一个进程的多个线程共享该进程的内存资源
不同进程的多个线程的内存资源互相隔离
-
提交任务的方式:
同步:在原地等
异步:不在原地等
12.1.2 进程状态
-
进程
1、正在执行的程序
2、正在计算机上执行的程序实例
3、能分配处理器并由处理器执行的实体
进程的两个基本元素是程序代码和代码相关联的数据集。进程是一种动态描述,但不代表所有的进程都在运行,进程在内存中会有各种状态。
-
进程状态
R # 可执行状态(运行状态) S # 可中断睡眠状态(sleeping) D # 不可中断睡眠(disk sleep) T # 暂停状态 z # 僵死状态 X # 死亡状态或退出状态(dead)
-
进程状态切换
# 三种状态 # 就绪态:进程已分配到除CPU以外的所有必要资源,只要获得处理机便可执行 # 执行态(Running):进程已获得处理机,其程序正在处理机上执行 # 阻塞态(Blocked):正在执行的进程,由于等待某个事件发生而无法执行时,就放弃处理机进入阻塞态。例如I/O、申请缓冲区不能满足、等待信号(信件)等 # 状态切换 就绪->执行 处在就绪态的进程,当调度器为其分配了处理机后就变成了执行态 执行->就绪 执行态的进程在其执行过程中,时间片跑完了不得不让出处理机,从执行态变成就绪态 执行->阻塞 正在执行的进程等待某种事件而无法继续执行时,便从执行态变成阻塞态 阻塞->就绪 处于阻塞态的进程,等待的事件结束,就从阻塞态变成就绪态
12.2 查看进程信息
12.2.1 ps aux
-
查看进程用户、PID、占用CPU百分比、占用内存百分比、状态、执行的命令等
-a # 显示一个终端的所有进程 -u # 选择有效的用户ID或用户名 -x # 显示没有控制终端的进程,同时显示各个命令的具体路径 [root@ccc ~]# ps aux | head -5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 125356 3792 ? Ss 14:43 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0.0 0.0 0 0 ? S 14:43 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? S< 14:43 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S 14:43 0:00 [ksoftirqd/0]
USER # 进行进程的用户 PID # 进程ID %CPU # CPU占用率 %MEN # 内存占用率 VSZ # 占用虚拟内存(kb),表示已分配的内存空间大小,不等于实际用到的内存大小 RSS # 占用实际内存(kb),常驻内存大小,即进程实际占用的物理内存大小 TTY # 进程运行的终端 STAT # 进程状态 START # 进程的启动时间 TIME # 进程占用CPU的总时间 COMMAND # 进程文件,进程名。带[]代表内核态进程,不带[]代表用户态进程
-
STAT进程状态
R # 运行 S # 可中断睡眠sleep,即在睡眠的过程中可以接收信号唤醒->执行的I/O操作能得到硬件设备的相应 D # 不可中断睡眠,即在睡眠的过程中不可以接收信号唤醒->执行的I/O操作得不到硬件设备的响应 T # 停止的进程 Z # 僵尸进程 X # 死掉的进程(几乎看不见,死掉会被立即回收) < # 优先级较高的进程 N # 优先级较低的进程 s # 包含子进程 + # 是前台的进程组 l # 小写字母l代表以线程的方式运行,即多线程 | # 多进程
-
两种睡眠状态
# 1、可中断睡眠状态(S) Interrupt Sleep 处于这种睡眠状态的进程是可以通过给他发送signal来唤醒的。 如HUP信号给nginx的master进程,可以让nginx重新加载配置文件而不需要重新启动nginx进程。 # 2、不可中断睡眠(D) Uninterruptible Sleep 处于这种状态的进程不接受任何外来的signal 包括但不限于kill、kill -9、kill -15、ctrl+c、ctrl+z # 解释 处于D状态是因为进程长时间等待I/O都没有响应,且被ps看到,意味着可能I/O出现问题或外设本身出现问题或NFS挂载的远程文件系统不可访问。 只有等待I/O恢复或者重启整个Linux系统才能从D状态恢复。 # 强调 D不可中断睡眠状态和Z僵尸进程都不可以用kill -9杀死
12.2.2 ps -elf
-
查看ppid
-
ps -ef只打印进程,而ps -elf会打印所有的线程,同时加了两列。
[root@ccc ~]# ps -ef | head -10 UID PID PPID C STIME TTY TIME CMD root 1 0 0 14:43 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 14:43 ? 00:00:00 [kthreadd] root 4 2 0 14:43 ? 00:00:00 [kworker/0:0H] root 6 2 0 14:43 ? 00:00:00 [ksoftirqd/0] root 7 2 0 14:43 ? 00:00:00 [migration/0] root 8 2 0 14:43 ? 00:00:00 [rcu_bh] root 9 2 0 14:43 ? 00:00:00 [rcu_sched] root 10 2 0 14:43 ? 00:00:00 [lru-add-drain] root 11 2 0 14:43 ? 00:00:00 [watchdog/0] [root@ccc ~]# ps -elf | head -10 F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 31339 ep_pol 14:43 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 1 S root 2 0 0 80 0 - 0 kthrea 14:43 ? 00:00:00 [kthreadd] 1 S root 4 2 0 60 -20 - 0 worker 14:43 ? 00:00:00 [kworker/0:0H] 1 S root 6 2 0 80 0 - 0 smpboo 14:43 ? 00:00:00 [ksoftirqd/0] 1 S root 7 2 0 -40 - - 0 smpboo 14:43 ? 00:00:00 [migration/0] 1 S root 8 2 0 80 0 - 0 rcu_gp 14:43 ? 00:00:00 [rcu_bh] 1 R root 9 2 0 80 0 - 0 - 14:43 ? 00:00:00 [rcu_sched] 1 S root 10 2 0 60 -20 - 0 rescue 14:43 ? 00:00:00 [lru-add-drain] 5 S root 11 2 0 -40 - - 0 smpboo 14:43 ? 00:00:00 [watchdog/0]
12.2.3 pstree进程树
-
查看进程树
[root@ccc ~]# rpm -qf `which pstree` psmisc-22.20-16.el7.x86_64 [root@ccc ~]# pstree systemd─┬─NetworkManager───2*[{NetworkManager}] ├─VGAuthService ├─agetty ├─auditd───{auditd} ├─chronyd ├─crond ├─dbus-daemon ├─master─┬─pickup │ └─qmgr ├─nginx───nginx ├─polkitd───6*[{polkitd}] ├─rsyslogd───2*[{rsyslogd}] ├─sshd───sshd───bash───pstree ├─systemd-journal ├─systemd-logind ├─systemd-udevd ├─tuned───4*[{tuned}] └─vmtoolsd───{vmtoolsd} [root@ccc ~]# pstree 4032 nginx───nginx
12.2.4 top动态查看
-
基本用法
[root@ccc ~]# top [root@ccc ~]# top -d 1 # 1秒刷新一次 [root@ccc ~]# top -d 1 -p 进程的PID [root@ccc ~]# top -d 1 -p `pgrep nginx | head -1` [root@ccc ~]# top -d 1 -p `pgrep nginx | head -1`,33 # 查看sshd及PID33的进程 [root@ccc ~]# top -d 1 -u cjx # 查看指定用户的进程 [root@ccc ~]# top -b -n 2 > top.txt # 将两次top的信息写入文件
-
显示信息解释
12.3 管理进程
12.3.1 优先级设置
-
在启动进程时用nice命令设置优先级
# 1、命令 nice [-n 优先级] # 2、选项介绍
-
对已运行的进程设置新的优先级
[root@ccc ~]# renice -20 11111