linux性能(一):cpu性能指标及工具
CPU性能指标
CPU使用率
用户CPU使用率, 包括用户态(user)和低优先级用户态(nice). 该指标过高说明应用程序比较繁忙.
系统CPU使用率, CPU在内核态运行的时间百分比(不含中断). 该指标高说明内核比较繁忙.
等待I/O的CPU使用率, iowait, 该指标高说明系统与硬件设备I/O交互时间比较长.
软/硬中断CPU使用率, 该指标高说明系统中发生大量中断.
steal CPU / guest CPU, 表示虚拟机占用的CPU百分比.
平均负载
理想情况下平均负载等于逻辑CPU个数,表示每个CPU都被充分利用. 若大于则说明系统负载较重.
平均负载:单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。它和我们传统意义上理解的CPU使用率并没有直接关系。
其中不可中断进程是正处于内核态关键流程中的进程(如常见的等待设备的I/O响应)。不可中断状态实际上是系统对进程和硬件设备的一种保护机制。
平均负载多少时合理
实际生产环境中将系统的平均负载监控起来,根据历史数据判断负载的变化趋势。当负载存在明显升高趋势时,及时进行分析和调查。当然也可以当设置阈值(如当平均负载高于CPU数量的70%时)
现实工作中我们会经常混淆平均负载和CPU使用率的概念,其实两者并不完全对等:CPU 密集型进程,大量 CPU 使用会导致平均负载升高,此时两者一致I/O 密集型进程,等待 I/O 也会导致平均负载升高,此时 CPU 使用率并不一定高大量等待 CPU 的进程调度会导致平均负载升高,此时 CPU 使用率也会比较高
平均负载高时可能是 CPU 密集型进程导致,也可能是 I/O 繁忙导致。具体分析时可以结合 mpstat/pidstat 工具辅助分析负载来源。
上下文切换
CPU 上下文切换,就是把前一个任务的 CPU 上下文(CPU 寄存器和 PC)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的位置,运行新任务。其中,保存下来的上下文会存储在系统内核中,待任务重新调度执行时再加载,保证原来的任务状态不受影响。
CPU 上下文切换分为:
- 进程上下文切换
- 线程上下文切换
- 中断上下文切换
进程上下文切换
进程是由内核管理和调度的,进程上下文切换只能发生在内核态。因此相比系统调用来说,在保存当前进程的内核状态和CPU寄存器之前,需要先把该进程的虚拟内存,栈保存下来。再加载新进程的内核态后,还要刷新进程的虚拟内存和用户栈。
进程只有在调度到CPU上运行时才需要切换上下文,有以下几种场景:CPU时间片轮流分配,系统资源不足导致进程挂起,进程通过sleep函数主动挂起,高优先级进程抢占时间片,硬件中断时CPU上的进程被挂起转而执行内核中的中断服务。
线程上下文切换
线程上下文切换分为两种:
- 前后线程同属于一个进程,切换时虚拟内存资源不变,只需要切换线程的私有数据,寄存器等;
- 前后线程属于不同进程,与进程上下文切换相同。
同进程的线程切换消耗资源较少,这也是多线程的优势。
中断上下文切换
中断上下文切换并不涉及到进程的用户态,因此中断上下文只包括内核态中断服务程序执行所必须的状态(CPU寄存器,内核堆栈,硬件中断参数等)。
中断处理优先级比进程高,所以中断上下文切换和进程上下文切换不会同时发生
CPU缓存命中率
CPU缓存的复用情况,命中率越高性能越好. 其中L1/L2常用在单核,L3则用在多核中
性能工具
平均负载案例先用uptime查看系统平均负载判断负载在升高后再用mpstat和pidstat分别查看每个CPU和每个进程CPU使用情况.找出导致平均负载较高的进程.上下文切换案例先用vmstat查看系统上下文切换和中断次数再用pidstat观察进程的自愿和非自愿上下文切换情况最后通过pidstat观察线程的上下文切换情况进程CPU使用率高案例先用top查看系统和进程的CPU使用情况,定位到进程再用perf top观察进程调用链,定位到具体函数系统CPU使用率高案例先用top查看系统和进程的CPU使用情况,top/pidstat都无法找到CPU使用率高的进程重新审视top输出从CPU使用率不高,但是处于Running状态的进程入手perf record/report发现短时进程导致 (execsnoop工具)不可中断和僵尸进程案例先用top观察iowait升高,发现大量不可中断和僵尸进程strace无法跟踪进程系统调用perf分析调用链发现根源来自磁盘直接I/O软中断案例top观察系统软中断CPU使用率高查看/proc/softirqs找到变化速率较快的几种软中断sar命令发现是网络小包问题tcpdump找出网络帧的类型和来源,确定SYN FLOOD攻击导致
根据指标找工具(cpu性能)
性能指标 | 工具 | 说明 |
---|---|---|
平均负载 |
uptime top |
uptime最简单; top提供更全面指标 |
系统整体CPU使用率 |
vmstat mpstat top sar |
top、vmstat、mpstat:只能动态查看 sar:可以记录历史数据 |
进程CPU使用率 |
top pidstat ps htop atop |
top、ps:按CPU使用率排序 pidstat:只显示实际使用CPU的进程 htop、atop:以不同颜色显示 |
系统上下文切换 | vmstat | 查看上下文切换 查看运行状态 查看不可中后段进程数量 |
进程上下文切换 | pidstat | pidstat -w: 自愿上下文切换 非自愿上下文切换 |
软中断 |
top mpstat /proc/softirqs |
top:软中断CPU使用率 mpstat和/proc/softirqs:提供各个软中断在每个CPU的运行次数 |
硬中断 |
vmstat /proc/interrupts |
vmstat提供总的中断次数 /proc/interrupts提供各种中断在CPU上运行的累积次数 |
网络 |
dstat sar tcpdump |
dstat、sar:提供总的网络接收和发送情况 tcpdump:动态抓取正在进行的网络通讯 |
I/O |
dstat sar |
都提供I/O的整体情况 |
CPU |
lscpu /proc/cpuinfo |
lscpu更直观 |
事件剖析 |
perf execsnoop |
perf:分析CPU的缓存以及内核调用链 execsnoop:监控短时进程 |
一:top命令
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
语法
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
参数说明:
d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
S : 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
s : 安全模式,将交谈式指令取消, 避免潜在的危机
i : 不显示任何闲置 (idle) 或无用 (zombie) 的进程
n : 更新的次数,完成后将会退出 top
b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
实例
[mi@app ~]$ top
top - 14:30:35 up 124 days, 2:58, 2 users, load average: 0.16, 0.07, 0.08
Tasks: 214 total, 1 running, 212 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.4 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.1 st
KiB Mem : 32945484 total, 1922560 free, 15182068 used, 15840856 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 17345600 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND1949 migu 20 0 8584668 2.1g 14104 S 2.3 6.6 118:06.68 java
20531 migu 20 0 8512308 2.4g 13892 S 1.3 7.7 26:43.37 java
23440 migu 20 0 7196668 1.1g 7688 S 1.0 3.3 814:26.26 java
31040 migu 20 0 108548 1292 728 S 1.0 0.0 1:48.01 pidstat1942 migu 20 0 8275420 1.3g 15028 S 0.7 4.0 69:23.56 java
含义
前5行为系统总体资源统计情况
top - | 系统当前时间 |
---|---|
up | 系统已开机多长时间 |
users | 当前用户数 |
load average | cpu平均负载,三个数值分别为,1分钟,5分钟,15分钟 |
Tasks |
系统当前进程数, total:总进程数, running:正在运行的进程数, sleeping:睡眠的进程数, stopped:停止的进程数, zombie:僵尸进程数 |
%Cpu(s) |
cpu使用率 us:用户使用cpu百分百, sy:系统内核使用cpu百分百, ni 用户进程空间内改变过优先级的进程占用CPU百分比 id:空闲的cpu百分比 wa 等待输入输出的CPU时间百分比 hi 硬中断(Hardware IRQ)占用CPU的百分比 si 软中断(Software Interrupts)占用CPU的百分比 st 用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间 |
Mem |
内存使用信息, total:总内存大小, free:空闲的内存, used:已使用的内存, buff/cache:缓存的内存大小 |
Swap | 虚拟内存信息 |
PID | 进程id |
USER | 进程所有者 |
PR | 优先级 |
NI | nice值,负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量 |
RES | 进程使用的物理内存大小 |
SHR | 共享内存大小 |
S | 进程状态,D:不可中断的睡眠状态,R:运行,S:睡眠,T:跟踪/停止,Z:僵尸进程 |
%CPU | 进程使用的CPU占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME | 进程使用的CPU时间总计 |
COMMAND | 命令名 |
二:vmstat命令
vmstat命令的含义为显示虚拟内存状态(“Virtual Memory Statistics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。
语法
[root@localhost ~]# vmstat [-a] [刷新延时 刷新次数]
[root@localhost ~]# vmstat [选项]
vmstat命令常用选项及含义
选项 | 含义 |
---|---|
-fs |
-f:显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的 processes 字段中取得的。 -s:将从启动到目前为止,由一些事件导致的内存变化情况列表说明。 |
-S | -S : 单位. 令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。 |
-d | -d: 列出硬盘有关读写总量的统计表。 |
-p | -p: 分区设备文件名.查看硬盘分区的读写情况。 |
实例
[mi@app ~]$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st2 0 0 2067240 155952 15568772 0 0 0 9 0 0 0 0 99 0 01 0 0 2065044 155952 15568772 0 0 0 112 3736 5584 2 1 97 0 00 0 0 2067176 155952 15568772 0 0 0 108 3941 5805 1 1 98 0 00 0 0 2067092 155952 15568780 0 0 0 0 3147 5378 0 0 99 0 00 0 0 2066596 155952 15568780 0 0 0 0 3260 5420 0 0 99 0 00 0 0 2066480 155952 15568972 0 0 0 0 5358 7234 2 1 98 0 0
含义
字段 | 含义 |
---|---|
procs |
进程信息字段: -r:等待运行的进程数,数量越大,系统越繁忙。 -b:不可被唤醒的进程数量,数量越大,系统越繁忙。 |
memory |
内存信息字段: -swpd:虚拟内存的使用情况,单位为 KB。 -free:空闲的内存容量,单位为 KB。 -buff:缓冲的内存容量,单位为 KB。 -cache:缓存的内存容量,单位为 KB。 |
swap |
交换分区信息字段: -si:从磁盘中交换到内存中数据的数量,单位为 KB。 -so:从内存中交换到磁盘中数据的数量,单位为 KB。 这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。 |
io |
磁盘读/写信息字段: -bi:从块设备中读入的数据的总量,单位是块。 -bo:写到块设备的数据的总量,单位是块。 这两个数越大,代表系统的 I/O 越繁忙。 |
system |
系统信息字段: -in:每秒被中断的进程次数。 -cs:每秒进行的事件切换次数。 这两个数越大,代表系统与接口设备的通信越繁忙。 |
cpu |
CPU信息字段: -us:非内核进程消耗 CPU 运算时间的百分比。 -sy:内核进程消耗 CPU 运算时间的百分比。 -id:空闲 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虚拟机所盗用的 CPU 百分比。 |
三:pidstat
pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。
pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
安装
pidstat 是sysstat软件套件的一部分,sysstat包含很多监控linux系统状态的工具,它能够从大多数linux发行版的软件源中获得。
yum install sysstat
语法
pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
常用的参数:-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况
-t:显示选择任务的线程的统计信息外的额外信息
-T { TASK | CHILD | ALL }
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-V:版本号
-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数
实例
(一)查看进程的cpu上下文切换
vmstat只能查看总的cpu上下文切换,pidstat可以查看每个进程的上下文切换
语法
[migu@app-hbbjhbqomclb01amg ~]$ pidstat -w 1
Linux 3.10.0-1160.25.1.el7.x86_64 (app-hbbjhbqomclb01amg) 11/29/2022 _x86_64_ (8 CPU)11:15:17 AM UID PID cswch/s nvcswch/s Command
11:15:18 AM 0 1 0.99 0.00 systemd
11:15:18 AM 0 6 0.99 0.00 ksoftirqd/0
11:15:18 AM 0 9 121.78 0.00 rcu_sched
11:15:18 AM 0 11 0.99 0.00 watchdog/0
11:15:18 AM 0 12 0.99 0.00 watchdog/1
11:15:18 AM 0 13 0.99 0.00 migration/1
11:15:18 AM 0 17 0.99 0.00 watchdog/2
11:15:18 AM 0 19 0.99 0.00 ksoftirqd/2
11:15:18 AM 0 22 0.99 0.00 watchdog/3
11:15:18 AM 0 27 0.99 0.00 watchdog/4
含义
cswch/s | 表示每秒自愿上下文切换(voluntary context switches)的次数 |
---|---|
ncswch/s | 表示每秒非自愿上下文切换(non voluntary context switches)的次数 |
- 自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。
- 而非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。
(二)查看进程的cpu使用率
语法
[mi@app ~]$ pidstat -u 5
Linux 3.10.0-1160.25.1.el7.x86_64 (app-hbbjhbqomclb01amg) 11/29/2022 _x86_64_ (8 CPU)
03:15:06 PM UID PID %usr %system %guest %CPU CPU Command
03:15:11 PM 0 9 0.00 0.20 0.00 0.20 7 rcu_sched
03:15:11 PM 0 434 1.00 1.20 0.00 2.20 3 systemd-journal
03:15:11 PM 1000 492 0.00 0.20 0.00 0.20 5 mgweb
03:15:11 PM 1000 493 0.00 0.20 0.00 0.20 4 mgweb
03:15:11 PM 0 1331 0.40 0.20 0.00 0.60 2 rsyslogd
03:15:11 PM 1000 1850 4.79 0.20 0.00 4.99 3 python3
03:15:11 PM 1000 1930 0.20 0.00 0.00 0.20 6 java
03:15:11 PM 1000 1942 1.00 0.40 0.00 1.40 0 java
03:15:11 PM 1000 1949 1.00 0.40 0.00 1.40 5 java
03:15:11 PM 1000 1955 0.40 0.00 0.00 0.40 7 java
03:15:11 PM 1000 3795 1.20 0.00 0.00 1.20 7 java
03:15:11 PM 0 4917 0.20 0.00 0.00 0.20 4 titan_monitor
03:15:11 PM 1000 8865 0.00 0.20 0.00 0.20 6 pidstat
03:15:11 PM 1000 20531 0.80 0.60 0.00 1.40 6 java
03:15:11 PM 1000 22578 0.20 0.00 0.00 0.20 0 redis-server
03:15:11 PM 1000 23440 0.20 0.40 0.00 0.60 7 java
含义
每隔 5 秒输出 1 组数据
%usr | 用户空间的cpu使用率 |
---|---|
%system | 内核空间的cpu使用率 |
%wait | 等待上下文切换的cpu使用率 |
%CPU | 总的cpu使用率 |
# -d 展示 I/O 统计数据,-p 指定进程号,间隔 1 秒输出 3 组数据
$ pidstat -d -p 4344 1 3
06:38:50 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
06:38:51 0 4344 0.00 0.00 0.00 0 app
06:38:52 0 4344 0.00 0.00 0.00 0 app
06:38:53 0 4344 0.00 0.00 0.00 0 app
kB_rd/s:表示每秒读的 KB 数kB_wr/s: 表示每秒写的 KB 数iodelay: 表示 I/O 的延迟(单位是时钟周期)
四、mpstat
mpstat的全称为Multiprocessor Statistics,是一款常用的多核CPU性能分析工具,用来实时查询每个CPU的性能指标,以及所有CPU的平均指标
安装
它是Linux性能工具集sysstat中的一个工具.(和pidstat一样)
yum install sysstat
语法
mpstat [-P {cpu|ALL}] [interval [count]]
参数 | 描述 |
---|---|
-P | {cpu|ALL} 表示监控哪个CPU,ALL是所有 |
internval | 相邻两次采样的间隔时间 |
count | 采样的次数,count只能和internval一起使用 |
实例
查看多核CPU核心的当前运行状况信息, 每2秒更新一次
[mi@app ~]$ mpstat -P ALL 2
Linux 3.10.0-1160.25.1.el7.x86_64 (app-hbbjhbqomclb01amg) 11/30/2022 _x86_64_ (8 CPU)10:15:57 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:15:59 AM all 0.44 0.00 0.31 0.00 0.00 0.00 0.12 0.00 0.00 99.12
10:15:59 AM 0 0.50 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.00
10:15:59 AM 1 0.50 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.00
10:15:59 AM 2 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
10:15:59 AM 3 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
10:15:59 AM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10:15:59 AM 5 1.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 98.51
10:15:59 AM 6 0.50 0.00 0.00 0.00 0.00 0.00 0.50 0.00 0.00 99.00
10:15:59 AM 7 0.00 0.00 0.50 0.00 0.00 0.00 0.99 0.00 0.00 98.51
linux性能(一):cpu性能指标及工具相关推荐
- Linux性能优化-CPU性能优化思路
目录 CPU性能指标 性能工具 如何迅速的分析CPU性能瓶颈 性能优化方法论 CPU优化 参考 CPU性能指标 CPU使用率 1.CPU使用率描述了非空闲时间占总CPU时间的百分比,根据CPU上运行任 ...
- 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(一) 平均负载、上下文切换、CPU 使用率
[Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(一) 平均负载.上下文切换.CPU 使用率 [1]相关概念 [1.1]平均负载 平均负载是指单位时间内,系统处于可运行状态和不可 ...
- linux性能优化--cpu篇
linux性能优化--cpu篇 前言 负载 CPU使用率 proc perf 一些链接 `perf list` 比较有用的event `perf stat` `perf record` Profili ...
- linux性能监控工具perf,Linux性能分析中常用的工具perf介绍
今天小编要跟大家分享的文章是关于Linux性能分析中常用的工具perf介绍.系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化.性能剖析的目标是寻找性能瓶 ...
- 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(三) Linux 软中断
[Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(三) Linux 软中断 [1]相关概念 [1.1]中断 中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力:为了减少 ...
- 显示器 Linux 性能 18 (一个命令行工具传递)
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因. ...
- linux运行16668端口,Linux 性能监控之命令行工具
引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...
- Linux性能之CPU使用率
转载:http://www.360doc.com/content/22/0708/08/11213896_1039036008.shtml CPU使用率 Linux 通过 /proc 虚拟文件系统,向 ...
- Linux性能分析—CPU篇
说到性能分析,基本上就是 CPU.内存.磁盘 IO 以及网络这几个部分,本文先来看 CPU 这个部分. 一.CPU 基础信息 进行性能分析之前,首先得知道 CPU 有哪些信息,使用lscpu命令查看 ...
最新文章
- 新浪微博应用 IE下面框架嵌套框架的问题解决
- centos架设lamp环境 php+mysql+httpd+vsftp
- 机器学习算法之K-近邻算法
- docker nodejs 基本应用
- 使用ReaderWriterLock优化文件缓存
- 【vue】ios中从详情页中返回到列表页出现空白的问题
- 手动加支付宝遇到的错误--iOS
- 如何掌握C#的核心技术
- MATLAB递归程序的调试方法
- 基础知识—循环语句-for
- 编辑中的word变成只读_文档设定密级,word中是这样加密,看一篇就精通了
- 利用sklearn对红酒数据集分类
- 两块stm32仿真protues串口通信程序
- 【软件需求工程】北理的恶龙们——软件需求规格说明
- 从零开始搭建免费小程序商城
- QT 使用 QTcpSocket来检测 ip 设备的网络状态
- linux 查看java进城_linux查看java进程|线程池信息
- 经典升级,长直播,马上开课 | 第 19 期高级转录组分析和R数据可视化火热报名中!!!...
- 起名算法 php,取名测试打分
- 放弃谷歌实习转投ICC,我是如何曲线上岸G家的?
热门文章
- Redis对于key的操作命令(附PHP代码)
- 转自http://www.eaw.com.cn/news/display/article/10303有5402方面的文章 (对本人学习C有帮助!)
- 【J2EE浅析】——RMI
- 仍在设置此设备的类配置(代码56)
- Excel公式系列: 单元格中字符是否包含某个特定值IF、ISERROR、FIND
- 给想当领导的员工(三)——执行力与领导力
- 数据科学猫:机器学习建模流程
- 套接字缓存区sk_buff
- 等级链与跳板原则_管理学原理重点
- IntelliJ IDEA 设置字体背景