源码包的编译与安装过程
知识点
熟悉源码包的编译和安装步骤
源码安装步骤:
-
下载源码包。
wget -q http://nginx.org/download/nginx-1.20.1.tar.gz
-
解压缩源码包。
tar xf nginx-1.20.1.tar.gz
-
安装了编译工具(如GCC和make)两种安装方式。
rpm -qa make gcc wget yum install gcc make wget -y
-
解决编译过程中可能出现的依赖问题(如安装PCRE库)。
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=option. yum install pcre-devel -y
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=option. yum install zlib-devel -y
-
编译源码生成二进制文件。
配置相关的选项,并生成Makefile
./configure --prefix=/application/nginx-1.20.1
将Makefile文件编译可执行二进制程序
make
-
安装二进制文件到系统。
make install
如何使用GCC和make等编译工具
GCC(GNU编译器集合)和make是两个在Linux环境下常用的编译工具。GCC是用于编译C、C++等语言的编译器,而make是一个自动化构建工具,它根据Makefile文件中的指令来编译和管理项目。
以下是使用GCC和make的基本步骤:
-
安装GCC和make:
在大多数Linux发行版中,GCC和make可以通过包管理器安装。例如,在Ubuntu或Debian系统中,可以使用以下命令安装:sudo apt-get update sudo apt-get install build-essential
这将安装GCC和make,以及其他一些基本的编译工具。
-
编写源代码:
使用文本编辑器编写你的C或C++源代码,并将其保存为.c
或.cpp
文件。 -
编译源代码:
使用GCC编译单个源文件,例如:gcc -o myprogram myprogram.c
这将编译
myprogram.c
并生成一个名为myprogram
的可执行文件。 -
使用Makefile:
对于更复杂的项目,通常需要一个Makefile来管理多个源文件和目标文件的编译。一个简单的Makefile可能如下所示:myprogram: main.o foo.o bar.o gcc -o myprogram main.o foo.o bar.o main.o: main.c gcc -c main.c foo.o: foo.c gcc -c foo.c bar.o: bar.c gcc -c bar.c clean: rm -f *.o myprogram
在这个Makefile中,
myprogram
是最终的可执行文件,它依赖于三个对象文件main.o
、foo.o
和bar.o
。每个对象文件都由相应的源文件编译生成。 -
构建项目:
在Makefile所在的目录下运行make命令来构建项目:make
make会根据Makefile中的指令自动编译源代码并生成可执行文件。
-
清理构建文件:
如果你想要清理所有编译过程中生成的对象文件和可执行文件,可以使用make的clean
目标:make clean
-
调试:
如果程序有错误,GCC提供了调试选项,比如-g
来生成调试信息,配合gdb使用。 -
优化:
为了提高程序的性能,可以使用优化选项,如-O2
或-O3
。
这些是使用GCC和make进行基本编译和构建的步骤。对于更高级的用法,如跨平台编译、静态库和动态库的创建等,需要更深入的学习和实践。
进程
知识点
进程定义(进程和程序概念)
进程是运行中的程序或软件,用英文表示为process
。它存在于内存中,运行结束后进程会消失。
-
进程与程序的区别:
- 进程是软件或程序运行后的产物。
- 程序(或代码)是静态的实体,可以是代码文件或应用软件文件,存放在磁盘中。
-
守护进程(Daemon):
Nginx、Apache、MySQL等都是常见的守护进程,它们在后台运行以提供网络服务或数据库服务。
- 在Linux中称为
Diamond
,在Windows中称为后台进程。 - 守护进程是为提供某种服务而持续运行的进程,如Linux下的SHD服务(可能指的是SSH服务)。
- 常见的守护进程包括Nginx、Apache、MySQL等网络服务,以及FTP服务。
- 在Linux中称为
-
程序的运行与进程的产生:
- 程序或软件运行起来后,就形成了进程。
- 守护进程是运行并提供服务的软件,它们在后台持续运行。
-
程序与代码文件:
- 程序或代码可以是可见的实体文件,存放在磁盘中。
- 程序通过执行变成进程,而守护进程是持续运行的进程类型。
进程的生命周期、资源管理等
- 进程的生命周期:文档通过比喻人类的生命周期来介绍进程的工作流程,从创建到结束的过程。
- 子进程的产生:当有任务需要处理时,父进程可以生成子进程来分担任务。
- 属性继承:子进程会继承父进程的某些属性。
- 资源管理:子进程使用资源后,父进程负责回收资源。
- 僵尸进程:如果子进程结束后父进程没有正确回收资源,就会形成僵尸进程。
- 并发能力:文档提到子进程可以提高程序处理任务的并发能力。
实际应用举例说明:
- 进程生命周期:
- 比如,当你打开一个网页浏览器时,操作系统会为你的浏览器创建一个进程。当你关闭浏览器时,这个进程就会结束它的生命周期。
- 子进程的产生:
- 考虑一个服务器需要同时处理多个用户的请求。服务器的主进程可以生成多个子进程,每个子进程负责处理一个用户的请求。
- 属性继承:
- 在Unix或Linux系统中,如果一个文本编辑器进程启动了一个子进程来执行文件搜索任务,子进程可能会继承父进程的环境变量,如当前工作目录。
- 资源管理:
- 一个数据库服务进程(父进程)可能会创建多个子进程来管理对数据库的并发访问。当子进程完成任务后,父进程会负责关闭子进程打开的数据库连接。
- 僵尸进程:
- 如果一个应用程序的子进程异常终止,而父进程没有检查子进程的状态或回收资源,子进程可能会成为僵尸进程,这在系统中会表现为一个不再运行但仍然占用进程表条目的进程。
- 并发能力:
- 一个Web服务器(如Nginx)通过生成多个子进程或线程来同时处理多个并发的HTTP请求,提高了服务器的并发处理能力。
进程监控和管理
- 进程监控和管理:文档强调了在企业环境中监控和管理进程的重要性。
ps
命令:ps
命令用于查看当前系统中的进程,它提供了一个进程的快照。- 快照概念:
ps
命令在执行时会捕捉当前时刻的进程状态,类似于拍照。 - 命令格式:文档提到了不同操作系统的命令格式差异,如Unix、BSD等。
- 参数使用:
ps
命令有多种参数,文档建议掌握常用的参数即可。 ps
命令的常用参数:ps -ef
:显示所有进程的详细信息,包括用户ID、进程ID、父进程ID、CPU使用率、使用时间、终端和命令。
- 进程属性:
UID
:用户ID,表示运行进程的用户。PID
:进程ID,表示进程的唯一标识。PPID
:父进程ID,表示生成当前进程的父进程的标识。CPU
:CPU使用率,表示进程使用的CPU资源百分比。TTY
:终端,表示进程使用的终端。TIME
:使用CPU的时间。COMMAND
:启动进程的命令。
- 资源监控:强调了监控CPU和磁盘资源的重要性,以确保良好的用户体验。
实际应用举例说明:
- 使用
ps
命令监控进程:- 假设你是一名系统管理员,需要检查系统中的进程以确定是否存在资源使用异常。你可以使用
ps -ef
命令来获取所有进程的列表,并查看它们的CPU使用率和内存使用情况。
- 假设你是一名系统管理员,需要检查系统中的进程以确定是否存在资源使用异常。你可以使用
- 资源使用监控:
- 如果你注意到系统中的CPU使用率异常高,你可以使用
ps -ef | sort -k 7 -r
命令(其中7
是CPU使用率所在的列,-r
表示降序排序)来找出CPU使用率最高的进程。
- 如果你注意到系统中的CPU使用率异常高,你可以使用
- 父进程和子进程的关系:
- 在调试程序时,如果一个程序崩溃了,你可能会想知道它的父进程是什么。使用
ps -ef
并查看PPID
列可以帮助你追踪到父进程。
- 在调试程序时,如果一个程序崩溃了,你可能会想知道它的父进程是什么。使用
- 终端和进程关联:
- 如果你需要找出在特定终端上运行的进程,可以查看
TTY
列来确定哪些进程与该终端关联。
- 如果你需要找出在特定终端上运行的进程,可以查看
- 资源优化:
- 如果你发现某个进程的CPU使用率持续很高,可能需要优化程序代码或分配更多的CPU资源给该进程。
ps命令的使用
-
ps
命令的高级使用:ps
命令用于查看进程的详细信息,文档介绍了如何使用ps
命令的参数来获取特定信息。 -
ps
命令的输出格式:文档提到了ps
命令的输出可以是BID格式,并且可以通过参数调整来查看全路径。 -
ps
命令的参数:ps aux
:显示所有进程的详细信息。ps -eo
:允许用户自定义输出字段。
-
进程的内存使用:
VSZ
:虚拟内存的大小。RSS
:物理内存的大小。
-
进程的状态:文档提到了进程的不同状态,如运行(
R
)、休眠(S
)等。STAT:该进程目前的状态,主要的状态包括
R :正在运行,或者是可被运行。
S :正在中断睡眠中,可被某些信号(signal) 唤醒。
D :不可中断睡眠。
T :正在侦测或者是停止了。
Z :已经终止,但是其父进程无法正常终止他,造成 zombie (疆尸) 进程的状态。
+ :前台进程。
l :多线程进程。
N :低优先级进程。
< :高优先级进程。
s :进程领导者。
L : 已将页面锁定到内存中。 -
自定义输出字段:使用
-eo
参数可以指定想要显示的字段。 -
排序和过滤:使用管道和
sort
、head
命令对ps
命令的输出进行排序和过滤。 -
资源监控的重要性:文档强调了监控CPU和内存使用的重要性。
实际应用举例说明:
-
查看进程的虚拟和物理内存使用:
- 假设你想要监控系统中进程的内存使用情况,可以使用
ps -eo pid,cmd,vsz,rss
命令来获取进程的PID、启动命令、虚拟内存大小和物理内存大小。
- 假设你想要监控系统中进程的内存使用情况,可以使用
-
监控高CPU使用率的进程:
- 如果你想找出系统中CPU使用率最高的进程,可以使用
ps -eo pid,cpu,cmd | sort -k 3 -r | head -n 10
命令来显示CPU使用率最高的前10个进程。
- 如果你想找出系统中CPU使用率最高的进程,可以使用
-
自定义输出字段:
- 有时候你可能只对特定的进程信息感兴趣,比如PID和命令名称,可以使用
ps -eo pid,cmd
来只显示这些信息。
- 有时候你可能只对特定的进程信息感兴趣,比如PID和命令名称,可以使用
-
使用AWK进行字段提取:
- 如果
ps
命令的输出字段不符合你的需求,可以使用AWK命令进行字段提取和格式化,例如ps -eo pid,cmd | awk '{print $1, $2}'
。
- 如果
-
监控系统资源并进行自动化处理:
- 你可以编写一个脚本,使用
ps
命令结合awk
和sort
来监控系统资源,并根据资源使用情况自动执行某些操作,如重启进程或发送警告。
- 你可以编写一个脚本,使用
-
使用
ps
命令进行故障排查:- 当系统响应缓慢时,可以使用
ps
命令查看哪些进程占用了大量的CPU或内存资源,以便于进行故障排查。
- 当系统响应缓慢时,可以使用
-
查看特定用户进程:使用
ps -u username
可以查看特定用户的进程。 -
后台运行进程:文档提到了使用
sleep
命令在后台运行进程。 -
杀死进程:使用
kill
命令可以终止进程。 -
服务器性能优化:在企业中,服务器性能优化主要关注CPU、内存、磁盘IO这三个核心指标。
实际应用举例说明:
- 查找特定用户的进程:
- 如果你想要查看系统中某个用户(比如
oldboy
)的进程,可以使用命令ps -u oldboy
。
- 如果你想要查看系统中某个用户(比如
- 杀死后台运行的进程:
- 如果你发现有一个
sleep
进程在后台运行,可能是测试或误操作产生的,可以使用kill
命令加上进程ID来终止它。
- 如果你发现有一个
- 资源管理与用户体验:
- 作为系统管理员,你需要监控系统资源的使用情况。如果发现CPU或内存使用率异常高,可能需要查找并分析这些占用资源的进程。例如,使用
ps -eo pid,cmd,vsz,rss,%cpu --sort=-%cpu
可以找出CPU使用率最高的进程。
- 作为系统管理员,你需要监控系统资源的使用情况。如果发现CPU或内存使用率异常高,可能需要查找并分析这些占用资源的进程。例如,使用
- 服务器性能优化:
- 在企业环境中,你可能需要定期检查服务器的CPU、内存和磁盘IO使用情况。如果发现性能瓶颈,需要分析具体原因,可能是由于某个进程占用了过多资源,或者是应用程序的代码需要优化。在必要时,可能需要增加服务器的硬件资源。
- 业务调整:
- 如果通过技术手段无法解决资源占用问题,可能需要从业务层面进行调整,比如优化应用程序的算法,减少不必要的计算,或者在流量高峰期进行合理的负载分配。
pstree`命令
pstree
命令:pstree
命令以树形结构显示系统中的进程。- 进程的启动流程:
pstree
显示了进程之间的父子关系,从系统的初始进程(如systemd)开始。 - 命令选项:
pstree
:默认从初始进程开始显示所有进程信息。pstree -a
:展开进程,包括子进程。pstree -p
:显示每个进程对应的完整指令,包括启动进程、路径参数等。pstree -c
:显示所有进程,包括子进程。pstree -u
:指定用户名称,显示该用户的进程。
- 进程状态:
pstree
可以展示进程的启动流程和状态。 - 进程号和用户:进程号是唯一的,而用户可以有多个进程。
- 实际应用:在企业中,
pstree
可以用于分析进程的层次结构,帮助理解进程之间的关系。
实际应用举例说明:
- 分析进程层次:
- 假设你想要查看系统中所有进程的层次结构,可以使用
pstree
命令。这有助于理解进程之间的父子关系,以及哪个进程是父进程,哪个是子进程。
- 假设你想要查看系统中所有进程的层次结构,可以使用
- 查找特定用户的进程:
- 如果你想要查看系统中某个用户(比如
nobody
)的进程,可以使用pstree -u nobody
命令。
- 如果你想要查看系统中某个用户(比如
- 查看进程的启动命令:
- 如果你需要查看特定进程(如
nginx
)是如何启动的,包括它的完整路径和参数,可以使用pstree -p nginx
命令。
- 如果你需要查看特定进程(如
- 监控进程状态:
- 在系统性能分析或故障排查时,使用
pstree
可以帮助你快速识别哪些进程正在运行,哪些可能已经停止响应。
- 在系统性能分析或故障排查时,使用
- 优化资源使用:
- 通过
pstree -a
查看所有进程及其子进程,可以帮助系统管理员识别资源使用率高的进程,并采取相应措施进行优化。
- 通过
pgrep命令
这份文档的知识点可以概括为以下几个方面:
pgrep
命令:pgrep
是用来查找匹配条件的进程。- 用法和功能:
pgrep
可以根据进程名、用户或其他属性来查找进程,并返回符合条件的进程的PID。
- 实际应用:
pgrep
可以用于快速查找特定用户的进程PID,或者根据进程名进行搜索。
- 与其他命令的结合使用:
pgrep
常与pstree
等命令结合使用,以便快速获取特定进程的详细信息。
- 简化操作:
- 使用
pgrep
可以避免手动查找进程ID的繁琐步骤,特别是在处理定时任务或特定用户进程时。
- 使用
实际应用举例说明:
- 查找特定用户的进程PID:
- 如果你需要找到用户
nobody
的所有进程PID,可以使用pgrep -u nobody
命令。
- 如果你需要找到用户
- 查找特定名称的进程:
- 如果系统中有多个同名的进程在运行,你想要找出它们的PID,可以使用
pgrep "process_name"
。
- 如果系统中有多个同名的进程在运行,你想要找出它们的PID,可以使用
- 结合使用
pstree
和pgrep
:- 如果你想要查看特定进程的树形结构,首先可以使用
pgrep
找到该进程的PID,然后使用pstree -p PID
来显示以该PID为中心的进程树。
- 如果你想要查看特定进程的树形结构,首先可以使用
- 自动化脚本中的使用:
- 在编写自动化脚本时,你可能需要根据进程名来杀死或重启进程。使用
pgrep
可以方便地获取这些进程的PID,然后传递给kill
或killall
命令。
- 在编写自动化脚本时,你可能需要根据进程名来杀死或重启进程。使用
- 监控定时任务:
- 如果你想要监控系统定时任务(如cron作业)的执行情况,可以使用
pgrep
来查找这些定时任务的PID,然后进一步分析或管理。
- 如果你想要监控系统定时任务(如cron作业)的执行情况,可以使用
top命令
这份文档的知识点可以概括为以下几个方面:
top
命令:top
命令用于实时显示系统中各个进程的资源占用情况。top
命令的参数:文档提到top
命令的参数相对简单,大多数情况下直接使用命令本身即可。top
命令的快捷键:强调了记住top
命令的快捷键的重要性,这些快捷键有助于用户更高效地使用top
命令。top
命令的输出:- 前五行输出提供了关键的系统状态信息。
- 系统时间与运行时间:
- 第一行输出显示当前系统时间和系统自启动以来的运行时间。
- 系统负载(Load Average):
load average
显示了过去1分钟、5分钟、15分钟的平均负载,是衡量系统繁忙程度的重要指标。
- 其他相关命令:
w
和uptime
命令也可以提供系统运行时间和当前登录用户的信息。
实际应用举例说明:
-
实时监控系统资源:
- 作为系统管理员,你可以使用
top
命令来实时监控CPU、内存使用率,以及哪些进程占用资源最多。
- 作为系统管理员,你可以使用
-
分析系统负载:
- 如果你注意到系统响应变慢,可以使用
top
命令查看系统负载。如果负载超过了CPU核心数,可能表明系统过载。
- 如果你注意到系统响应变慢,可以使用
-
识别长时间运行的进程:
- 使用
top
命令可以找出那些长时间占用CPU或内存的进程,这些进程可能需要被优化或重启。
- 使用
-
响应用户支持请求:
- 当用户报告系统性能问题时,你可以使用
top
命令快速查看是否有异常进程影响系统性能,并采取相应措施。
- 当用户报告系统性能问题时,你可以使用
-
教学和培训:
- 在教育环境中,
top
命令可以作为教授系统监控和性能分析的重要工具。
- 在教育环境中,
-
系统维护和规划:
- 通过定期使用
top
命令,系统管理员可以识别系统资源的使用模式,并据此进行系统维护和资源规划。
- 通过定期使用
-
top
命令的用途:top
命令用于实时显示系统中各个进程的资源占用情况。 -
进程状态:
TASK
:表示任务或进程。- 运行中(
r
)、睡眠(s
)、停止(t
)、僵尸(z
)状态的进程。
-
CPU使用情况:
- 用户空间(
us
):应用程序占用的CPU百分比。 - 系统空间(
sy
):内核与硬件操作相关的CPU百分比。
- 用户空间(
-
CPU负载模拟:
- 使用
stress
命令模拟CPU和IO负载。
- 使用
-
内存状态:
- 总内存、已使用内存、缓存和缓冲区内存。
-
free
命令:用于查看内存状态,包括交换分区(swap)的使用情况。 -
top
命令的快捷键:top必会快捷键指令(老男孩抓重点思想)
1 #查看系统核心总数, 类似于 lscpu(CPUs)
q #退出top
M #按内存使用百分比排序输出
P #按CPU使用百分比排序输出
R #对已排序的列反转排序
###抓重点显示,有助于查看的指令。
x #高亮显示排序的列
z #以彩色信息展示
b #高亮显示处于R状态的进程或< #改变排序的列,依然高亮显示。
#top熟悉了解的快捷键
h #查看帮助
l,t,m #显示/隐藏前5行的数据输出 -
系统负载(Load Average):
- 表示过去1分钟、5分钟、15分钟的平均负载。
-
磁盘和IO状态:
- 磁盘IO操作的百分比,高百分比可能表明磁盘性能问题。
-
进程优先级:
NI
:nice值,表示进程的优先级。
实际应用举例说明:
- 监控系统资源:
- 使用
top
命令可以实时监控系统中CPU、内存的使用情况,帮助系统管理员快速定位资源瓶颈。
- 使用
- 模拟负载:
- 使用
stress
命令可以模拟高负载情况,用于压力测试和性能评估。
- 使用
- 分析磁盘性能:
- 如果
top
显示磁盘IO百分比很高,可能表明磁盘性能存在问题,需要进一步分析磁盘使用情况。
- 如果
- 管理进程:
- 通过
top
可以查看进程的PID和状态,结合kill
命令可以管理或终止不正常的进程。
- 通过
- 内存监控:
- 使用
free -m
命令可以查看内存的使用情况,包括已使用内存、空闲内存、缓存和缓冲区内存。
- 使用
- 系统负载分析:
- 系统负载是衡量系统繁忙程度的重要指标,如果长时间超过CPU核心数,可能需要考虑优化应用程序或增加硬件资源。
- 面试常见问题:
- 在技术面试中,可能会询问如何使用
top
命令查看CPU核心数,如何通过top
命令监控系统资源等。
- 在技术面试中,可能会询问如何使用