正式班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
    
原文地址:https://www.cnblogs.com/caojiaxin/p/13922781.html