源码包管理实践
1.源码包是什么
源码包指的是开发编写好的程序源代码,但并没有将其编译为一个能正常使用的工具。
2.为什么要学习源码包
1)部分软件官网仅提供源码包,需要自行编译并安装。
2)部分软件在新版本有一些特性还没来得及制作成rpm包时,可以自行编译软件使用其新特性。
3.源码包的优缺点
优点是:
1)可以自行修改源代码
2)可以定制需要的相关功能
3)新版软件优先更新源码
缺点是:
1) 相对yum安装软件会复杂很多。
2) 标准化实施困难,自动化就无法落地。
4.包如何获取
常见的软件包都可以在官网获取源码包,比如 apache(并发3000-5000),nginx
(并发10000-30000),mysql等等
4.将源码包编译
![]()
上述安装往往是C语言开发的软件.13年以前,很多系统服务级大多都是C语言开发
C语言优势:
运行速度快.缺点:难学,开发速度慢,目前在互联网企业几乎绝技
Python语言:开发效率高,用途广.解释性语言,运行速度慢
GO语言:开发效率高,用途逐渐变广,编译速度快,替代C语言,主要是高并发的场合.
编译Nginx
1.基础环境准备 yum install -y gcc make wget
2.下载源码包
cd /usr/src/
wget -q http://nginx.org/download/nginx-1.20.1.tar.gz
3.解压源码包, 并进入相应目录
tar xf nginx-1.20.1.tar.gz
cd nginx-1.20.1/
4.配置相关的选项,并生成Makefile
./configure --prefix=/application/nginx-1.20.1
5.将Makefile文件编译可执行二进制程序
make
6.将二进制文件拷贝至对应的目录中
make install
7.启动测试
netstat -lntup|grep nginx
/application/nginx-1.20.1/sbin/nginx
netstat -lntup|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0: LISTEN 74238/nginx: master
curl 127.0.0.1
/application/nginx-1.20.1/sbin/nginx -s stop
netstat -lntup|grep nginx
epel源有nginx的,nginx官方更新
yum instlal nginx -y
特点:
1.安装复杂。
2.慢。
3.容易报错。
进程管理
1.什么是进程?
运行的程序叫进程(process)。
守护进程(daemon process)
程序/代码(program/code)
2.程序与进程之间有什么区别?
程序是数据和指令的集合,是一个静态的概念。同时程序可以长期存在系统中。
进程是程序运行的过程,是一个动态的概念。进程是存在生命周期的概念的,也就是说进程会随着程序的终止而销毁,不会永久存在系统中。
3.进程的生命周期?
当父进程接收到任务调度时,会通过fock派生子进程来处理,那么子进程会继承父进程属性。
子进程在处理任务代码时,父进程会进入等待状态中...
子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源。
如果子进程在处理任务过程中,父进程退出了,子进程没有退出,那么这些子进程就没有父进程来管理了,就变成僵尸进程。
注: 每个进程都父进程的PPID,子进程则叫PID。
4.进程运行的状态指标?
ps命令:
ps命令用于列出执行ps命令的那个时刻的进程快照,就像用手机给进程照了一张照片。
常用:
-e 显示所有进程※
-f 额外显示UID、PPID、C与STIME栏位※
常用命令:
ps -ef 简易查看进程,过滤进程的命令。
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 2 0 0 Jun02 ? 00:00:00 [kthreadd]
root 4 2 0 Jun02 ? 00:00:00 [kworker/0:0H]
root 6 2 0 Jun02 ? 00:00:09 [ksoftirqd/0]
root 7 2 0 Jun02 ? 00:00:00 [migration/0]
root 8 2 0 Jun02 ? 00:00:00 [rcu_bh]
PID为1的初始进程,C7:systemd,C6:init
输出信息中各列的说明如下。
UID:进程被该UID所拥有,程序运行必须要有用户,一般是虚拟用户。
PID:进程的标识号;Process ID
PPID:进程的父进程的标识号;
C:CPU使用的资源百分比;
STIME:进程开始的时间;
TTY :该进程是在哪个终端机上面运作,若与终端机无关,则显示?,另外, tty1-tty6是本机上面的登入者进程,若为pts/0等,则表示为由网络连接
进主机的进程;
TIME:进程所使用的总的CPU时间;
CMD:正在执行的命令行。
这里使用BSD语法格式显示每个进程信息。
ps aux <== BSD格式参数,使用a选项和x选项显示所有进程,使用u选项显示进程的用户信息。
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S Jun02 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< Jun02 0:00 [kworker/0:0H]
输出信息中各列的说明如下。
USER:该进程属于的用户;
PID :该进程的进程号;
%CPU:该进程使用掉的CPU资源百分比;*****
%MEM:该进程所占用的物理内存百分比;*****
VSZ :(Virtual Size)进程占用的虚拟内存量 (单位Kb);*****
RSS :该进程占用的物理内存大小 (单位Kb);*****
TTY :该进程是在哪个终端机上面运作的,若与终端机无关,则显示?,另外, tty1-tty6是本机上面登入者进程,若为pts/0等,表示为由网络连接进
主机进程;
STAT:该进程目前的状态
START:该进程被触发启动的时间;
TIME :该进程实际使用 CPU 运作的时间;
COMMAND:该进程的实际命令,[ 方括号 ] 属于内核态的进程。 没有 [ ] 的是用户态进程。。
STAT:该进程目前的状态,主要的状态包括
R :正在运行,或者是可被运行。
S :正在中断睡眠中,可被某些信号(signal) 唤醒。
D :不可中断睡眠。
T :正在侦测或者是停止了。
Z :已经终止,但是其父进程无法正常终止他,造成 zombie (疆尸) 进程的状态。
+ :前台进程。
l :多线程进程。
N :低优先级进程。
< :高优先级进程。
s :进程领导者。
L : 已将页面锁定到内存中。
![]()
AIX格式:ps -eo "%p %y %x %c"
-e是显示所有进程,
-o可以自定义输出指定的字段,以逗号分隔
ps -eo "%p %y %x %c"
PID TTY TIME COMMAND
1 ? 00:00:06 systemd
CODE NORMAL HEADER
代码 标准含义 命令行表头内容
%C pcpu %CPU
%G group GROUP
%P ppid PPID
%U user USER
%a args COMMAND
%c comm COMMAND
%g rgroup RGROUP
%n nice NI
%p pid PID
%r pgid PGID
%t etime ELAPSED
%u ruser RUSER
%x time TIME
%y tty TTY
%z vsz VSZ
----------------------------
ps -eo "%p %C %z %c"
%p pid PID
%C pcpu %CPU
%z vsz VSZ
%c comm COMMAND
ps -eo "%p %C %z %c"
PID %CPU VSZ COMMAND
1 0.0 46368 systemd
2 0.0 0 kthreadd
ps aux|awk '{print $2"\t"$3"\t"$4"\t"$5"\t"$6}'
PID %CPU %MEM VSZ RSS
1 0.0 0.1 46368 6700
2 0.0 0.0 0 0
倒序排序
ps -eo "%p %C %z %c" --sort -vsz|head
PID %CPU VSZ COMMAND
1053 0.0 612376 polkitd
20524 0.0 574284 tuned
ps -eo "%p %C %z %c" --sort vsz 升序
ps aux --sort vsz --sort 加上对应格式,可以进行排序
ps aux --sort -vsz |head --sort后面加上 -(减号)表示逆序排序
查看某个进程在哪个CPU上运行
ps -eo pid,args,psr
PID COMMAND PSR
1 /usr/lib/systemd/systemd -- 0
2 [kthreadd] 0
4 [kworker/0:0H] 0
ps aux|awk '{print $2"\t"$3"\t"$4"\t"$5"\t"$6}'|sort -rn -k4|head
1053 0.0 0.3 612376 12292
20524 0.0 0.4 574284 17464
1080 0.0 0.2 474920 8928
总结
ps aux
a 显示与终端相关的所有进程,包含每个进程的完整路径※
u 显示进程的用户信息※
x 显示与终端无关的所有进程※
-u 显示指定用户相关的进程信息
ps -ef
-e 显示所有进程※
-f 额外显示UID、PPID、C与STIME栏位※
企业如何用?
查找占用 cpu mem 虚拟内存 更多的进程,
分析进程的问题,解决问题,把资源降下来。
如果发现没有异常,还无法降下来,就增加资源
维护服务器性能:CPU、内存、IO
pstree:显示进程状态树
【功能说明】
pstree命令以树形结构显示进程和进程之间的关系。
pstree
-a 显示启动每个进程对应的完整指令,包含启动进程的路径、参数等
-c 不精简显示进程信息,即显示的进程中包含子进程和父进程
-h 对现在执行的程序进行特别标注
-n 根据进程PID号来排序输出,默认是以程序名称排序输出的
-p 显示进程的PID
-u 显示进程对应的用户名称
pgrep crond
ps -c -p `pgrep crond`
pstree -p 74537
pstree -a
pstree -c -p 74537
pstree -u nobody
pgrep:查找匹配条件的进程
pgrep命令可以查找匹配条件的进程号。
-u 显示指定用户的所有进程号
pgrep crond
2496
pstree -p 2496
crond(2496)
pstree -p `pgrep crond`
crond(2496)
pgrep -u nobody
74538
top:实时显示系统中各个进程的资源占用状况
![]()
参数选项 解释说明(带※的为重点)
-a 将进程按照使用内存排序
-b 以批处理模式显示进程信息,输出结果可以传递给其他程序或写入到文件中。
-c 显示进程的整个命令路径,而不是只显示命令名称
-d 指定每两次屏幕信息刷新之间的时间间隔(top -d 1)
-H 指定这个可以显示每个线程的情况,否则就是进程的总的状态
-i 不显示闲置或者僵死的进程信息
-n top输出信息更新的次数,完成后将退出top命令
-p 显示指定的进程信息(top -p 进程号)
-u 指定用户
top输出内容
第一行:任务队列信息,同uptime命令的执行结果。
01:12:32 当前系统时间。
up 2 days, 2:47 系统已经运行了1天16小时36分。
2 users 当前有2个用户登录系统。
load average: 0.00, 0.01, 0.05
load average 平均负载
后面的三个数分别是1分钟、5分钟、15分钟的平均负载情况。
第二行:进程状态 Tasks任务
任务 含义
Tasks: 129 total 进程的总数
1 running 正在运行的进程数
128 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
--------
START:该进程目前的状态,主要的状态包括
R :正在运行,或者是可被运行。
S :正在中断睡眠中,可被某些信号(signal) 唤醒。
D :不可中断睡眠。
T :正在侦测或者是停止了。
Z :已经终止,但是其父进程无法正常终止他,造成 zombie (僵尸) 进程的状态。
---------------
第三行: CPU状态信息
0.0% us (user)用户空间占用CPU的百分比(如:应用程序、执行命令)。*****
0.0% sy (system)内核空间占用CPU的百分比(如:内核进程、硬件磁盘操作)。*****
0.0% ni (nice)改变过优先级的进程占用CPU的百分比。
100.0% id (idle)空闲CPU百分比,数值越大,CPU越空闲。*****
0.0% wa (wait)IO等待占用CPU的百分比。*****
0.0% hi (hard Interrupts)硬中断(Hardware IRQ)占用CPU的百分比。
0.0% si 软中断(Software Interrupts)占用CPU的百分比。
0.0% st 虚拟机占用CPU的百分比。
第四行:内存
4026136 total 内存一共多大
203768 free 可用内存,剩余内存
228476 used 已经使用的内存
3593892 buff/cache 系统缓存和缓冲占用内存空间
第五行 swap交换分区信息
12097148 total 交换区总量。
0k used 使用的交换区总量。
2097148 free 空闲交换区总量。
3531892 avail Mem 可用内存大小
以上两行: cat /proc/meminfo或free -m获取。
--快捷键:
l,t,m 显示/隐藏前5行的数据输出
模拟消耗负载,消耗CPU,消耗IO工具
stress - tool to impose load on and stress test systems
Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s
stress --io 4 --timeout 100s
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20759 root 20 0 199460 4856 3724 R 0.3 0.1 2:24.05 vmtoolsd
从第七行开始,给出的是各进程(任务)的状态监控。
PID 进程id。
USER 进程所有者。
PR 进程优先级。
NI nice值,负值表示高优先级,正值表示低优先级。
VIRT 进程使用的虚拟内存总量,单位kb。*****
RES 进程使用的、未被换出的物理内存大小,单位kb。*****
SHR 共享内存大小,单位kb。*****
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程。
%CPU 上次更新到现在的CPU时间占用百分比。*****
%MEM 进程使用的物理内存百分比。*****
TIME+ 进程使用的CPU时间总计,单位1/100秒。
COMMAND 进程名称(命令名/命令行)。
top必会快捷键指令
字母 含义
1 查看系统核心总数, 类似于 lscpu(CPUs)
q 退出top
M 按内存使用百分比排序输出
P 按CPU使用百分比排序输出
R 对已排序的列反转排序
-----抓重点显示,有助于查看的指令。-----------------------------
x 高亮显示排序的列
z 以彩色信息展示
b 高亮显示处于R状态的进程
>或< 改变排序的列,依然高亮显示。
top熟悉了解的快捷键---------------------------------------
h 查看帮助
l,t,m 显示/隐藏前5行的数据输出