zoukankan      html  css  js  c++  java
  • 正式班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
      
  • 相关阅读:
    IE故障修复之点击无反应
    第三十四天 我为集成平台狂(七)-步履轻盈的JQuery(五)
    《世界如此险恶,你要内心强大》读书笔记(二)
    hbase phoenix char may not be null
    堆(优先级队列) 的应用
    JVM 调优总结
    Reactor模式和NIO
    JVM调优总结 -Xms -Xmx -Xmn -Xss
    Hadoop源码分析37 RPC的线程协作
    Hadoop源码分析37 RPC的线程协作
  • 原文地址:https://www.cnblogs.com/caojiaxin/p/13922781.html
Copyright © 2011-2022 走看看