查看服务器的基本信息
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 一个物理封装的CPU(通过physical id区分判断)可以有多个核(通过core id区分判断).而每个核可以有多个逻辑cpu(通过processor区分判断)
# 查看物理CPU个数(主机上看得见摸得着那块CPU硬件)
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数:处理数据的芯片组数量,双核,四核就是指的CPU核心)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 超线程:一个CPU核就是一个物理线程,由英特尔开发超线程技术可以把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥CPU的性能
# 查看逻辑CPU的个数(top命令,然后输入1也是可以的)
cat /proc/cpuinfo| grep "processor"| wc -l
# 查看CPU信息(逻辑核数和型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
# 系统简单查看CPU
lscpu
# 查看内存 cat /proc/meminfo
free -m
# 查看磁盘空间
df -h
# 查看目录大小
du -sh ./ # (目录名)
# 查看用户登录日志
last
# 查看网速
pip install speedtest-cli
speedtest-cli # 上行/下行网速
#磁盘的读取速度
yum install hdparm
hdparm -Tt /dev/vda1
进程管理工具之ps
ps # 仅仅显示本终端的进程
-a # 显示终端中进行的所有进程
-x # 会显示没有控制终端的进程
-e # 所有的进程
-u # 查看某个用户的所有进程
-f # 来查看格式化的信息列表
ps -u femn # 查看所有femn用户的进程
ps aux # 可以对系统进程更加全面的了解
ps -aux | less
# less是一个分页显示文件的工具工具,它允许你一页一页(或一个屏幕一个屏幕)地查看信息
ps -ef # 所有进程 PID PPID
ps -efH # 把输出的进程组成一个层级的格式 树状
ps axjf # 树状视图 等于 pstree
ps -ef | grep python3 | cut -c 10-15 | xargs kill -9
# Kill 某个用户或命令的所有进程
ps axjf |grep nginx
pgrep nginx # 单单的得到PID,和其子进程号
ps -aux --sort -pcpu | head -n 10
# 根据 CPU 使用来升序排序 +pcpu倒序
ps -aux --sort -pmem | head -n 10
# 根据 内存 使用来升序排序
ps -aux --sort -pcpu,-pmem | head -n 10
# 仅仅得到本机的程序名相关的进程
ps aux/-ef |grep ssserver # 程序名(命令名)或者PID
进程管理工具之top
top操作:
| 操作 | 显示 |
|---|---|
| P | CPU占用百分比排序,%CPU |
| M | 占据内存百分比排序,%MEM |
| T | 累计占据CPU时间排序,TIME+ |
| R | 将当前的排序倒转 |
| 大写U | 输入用户名,系统就会切换为指定用户的进程运行界面 |
| m | 以条形的格式输出内存的使用量,再次按m可切换不同模式 |
| t | 以条形的格式输出CPU的使用量,再次按t可切换不同模式 |
| 小写k | 再次输入进程的PID号,即可终止进程 |
| s | 再输入数字,如1就表示1秒刷新一次 |
| f | 选择显示的内容,space显示或隐藏对应的列 |
| c | 切换显示命令名称和完整命令行 |
| 数字1 | 显示所有CPU |
前五行是系统整体的统计信息.第一行是任务队列信息,同 uptime 命令的执行结果
| 参数 | 含意 |
|---|---|
| 11:12:00 | 当前时间 |
| up 2:13 | 系统总运行时间,格式为时:分 |
| 8 users | 当前登录用户数,同一帐号登录多个终端也会累加 |
| load average: 0.32, 0.22, 0.23 | 系统负载,即任务队列的平均长度. 三个数值分别为 1分钟,5分钟,15分钟前到现在的平均值. 0.32/CPU核数不大于1系统性能处于良好状态(最好以15分钟的负载计算来判断,是否需要调整服务器) |
第二三行为进程和CPU的信息.当有多个CPU时,这些内容可能会超过两行.内容如下:
| 参数 | 含意 |
|---|---|
| Tasks: 322 total | 进程总数 |
| 1 running | 正在运行的进程数 |
| 320 sleeping | 睡眠的进程数 |
| 0 stopped | 停止的进程数 |
| 1 zombie | 僵尸的进程数 |
| %Cpu(s): 5.6 us | 用户空间占用CPU百分比 |
| 4.2 sy | 内核空间占用CPU百分比 |
| 0.0 ni | 用户空间内改变过优先级的进程\占用CPU百分比(Nice) |
| 90.3 id | 空闲CPU百分比 |
| 0.0 wa | 等待输入输出(IO)的CPU时间百分比 |
| 0.0 hi | 硬件中断 |
| 0.0 si | 软件中断 |
| 0.0 st | 被虚拟化程序偷走的时间 |
最后两行为内存信息:
| 参数 | 含意 |
|---|---|
| KiB Mem : 7634204 total | 物理内存总量 |
| 292728 free | 使用的物理内存总量 |
| 5354884 used | 空闲内存总量 |
| 1986592 buff/cache | 用于缓冲和缓存的内存空间 |
| KiB Swap: 3990524 total | 交换区总量 |
| 3988988 free | 空闲交换区总量 |
| 1536 used | 已用交换区总量 |
| 1811888 avail Mem | 可用内存空间 |
top中显示状态的字段
| 参数 | 含意 |
|---|---|
| PID | 进程ID |
| USER | 任务所有者名称 |
| PR | Priority优先级 |
| NI | Nice值:负值表示高优先级,正值表示低优先级 |
| VIRT | 虚拟内存总量(集),单位kb VIRT=SWAP+RES |
| RES | 常驻内存总量(集) ,单位kb RES=CODE+DATA |
| SHR | 共享内存空间 ,单位kb |
| S | Process Statue当前进程状态:D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
| %CPU | CPU使用率 |
| %MEM | 内存使用率 |
| TIME+ | 进程使用的CPU时间,进程占用多个cpu的时间是累加的 2:32.45代表2分钟,30秒,2秒,十分之4秒,百分之5秒,是按位来计算的 |
| COMMAND | 启动命令 |
| SWAP | 进程使用的虚拟内存中,被换出的大小,单位kb |
| CODE | 可执行代码占用的物理内存大小,单位kb |
| DATA | 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb |
ab
| 参数 | 含意 |
|---|---|
| Total transferred: | 总共网络传输量 |
| HTML transferred: | HTML内容传输量 |
| Failed requests: | 失败的请求数: Connect(连接失败的次数), Receive(接收数据失败的次数), Length(接收到的数据长度不一致的次数), Exceptions(程序异常的次数) |
| Non-2xx responses: | 非2xx状态请求数,并不代表请求一定是失败的 |
| Requests per second(QPS): | 吞吐率:每秒处理请求的数量 |
| Time per request: | 用户平均请求等待时间 |
| Time per request: | 服务器平均请求处理时间(across all concurrent requests) |
| Transfer rate: | 传输流量,单位KB/s,反映网络传输压力 |
| Connection Times (ms): | 网络上消耗的时间的分解: Connect: 创建TCP连接到服务器或者代理服务器所花费的时间,通常我们习惯设置Web服务器的Connection:keep-alive,防止重复建立连接,减少请求时间 Processing: 写入缓冲区消耗+链路消耗+服务端消耗 Waiting: 写入缓冲区消耗+链路消耗+服务端消耗+读取数据消耗 Total: 总花费时间 |
| Percentage of the requests served within a certain time (ms) | 50% 112: 其中50%的用户响应时间小于112 毫秒 90% 190: 90% 的用户响应时间小于190 毫秒, 100% 293 (longest request): 最大的响应时间小于293 毫秒 |
由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数
并发继续增大后nginx遇到的第一个瓶颈在CPU
网络相关的服务(socket服务),或其它的网络相接进程(网络是双向的)
netstat -anpt |grep ssh #程序名 得到PID 端口号
netstat -lnpt |grep 8388 #端口号 得到PID,进程名
sudo lsof -i :8001 #端口号 PID,User,进程名
sudo lsof -p 1609 #PID
ll /proc/进程号
killall http* 它支持通过进程名而不是进程号来结束进程,也支持通配符