源码包管理实践

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行的数据输出
posted on 2021-06-09 18:55  晨曦日出  阅读(241)  评论(1)    收藏  举报