如何在 1 分钟内快速展开 Linux 性能分析?
liebian365 2024-10-19 07:59 20 浏览 0 评论
1. 写在前面
当 Linux 系统存在性能问题时,如何在最短时间内获取系统性能摘要及定位瓶颈?
本文将围绕问题,介绍如何通过标准 Linux 工具快速查找、分析系统错误、资源饱和度(指资源负载超过其处理能力),全文涉及的命令输出都很容易理解,有助于快速评估系统性能和资源利用率。
指令 | 描述 |
uptime | 报告系统正常运行时间; |
dmesg | tail | 显示系统内核的日志信息; |
vmstat | 报告虚拟内存统计信息; |
mpstat -P ALL 1 | 报告处理器静态数据; |
pidstat 1 | 报告全部/指定 进程 CPU、内存等统计信息; |
iostat -xz 1 | 报告 CPU、磁盘 I/O 和 NFS 统计信息; |
free -m | 显示系统可用/已用内存; |
sar -n DEV 1 | 系统运行状态统计工具; |
sar -n TCP,ETCP 1 | / |
top | 显示系统各个进程资源占用; |
其中一些命令需要安装 sysstat 软件包(ubuntu:apt-get install sysstat)。
下文将总结这些命令,并通过示例,解释如何通过指标进行性能分析。
2. 性能分析工具集
2.1 uptime
uptime 是一个查看系统负载平均值的快速方法,当用于分析 Linux 性能瓶颈时,主要关注系统的运行时间、当前登录用户数量以及负载平均值。负载平均值是关键指标,它显示系统在过去 1 分钟、5 分钟和 15 分钟内的平均负载。
root@jpzhang-dev:~# uptime
10:55:34 up 17 days, 1:30, 2 users, load average: 0.18, 0.07, 0.02
输出解释
- 10:55:34:当前时间;
- up 17 days, 1:30:系统已运行的时间,这里表示系统已经连续运行了 17 天 1 小时 30 分钟;
- 2 users:当前登录到系统的用户数量;
- load average: 0.18, 0.07, 0.02:系统的负载平均值,分别表示最近 1 分钟、5 分钟和 15 分钟的平均负载。
负载分析
- 单核系统(假设系统有 1 个 CPU 核心):
- load average: 1.0 表示系统完全忙碌;
- load average: >1.0 表示系统超负荷运行,可能存在性能瓶颈;
- 多核系统(假设系统有 4 个 CPU 核心):
- load average: 4.0 表示系统完全忙碌;
- load average: >4.0 表示系统超负荷运行,可能存在性能瓶颈;
- 负载趋势:
- 如果 1 分钟的负载明显高于 5 分钟和 15 分钟的负载,表示系统负载最近增加;
- 如果 1 分钟的负载明显低于 5 分钟或者 15 分钟,表示系统负载降低,可以查看过去一段时间系统情况分析瓶颈;
- 如果 5 分钟和 15 分钟的负载都很高,表示系统长时间负载过高;
2.2 dmesg | tail
通常用于查看启动信息、硬件错误和内核调试消息;
root@jpzhang-dev:~# dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.
如果存在内核日志,通过上述命令可查看最近 10 条系统信息,用于查找可能导致性能问题的错误,例如上述输出包括 oom-killer 和 TCP 丢弃请求。
2.3 vmstat
vmstat 是虚拟内存统计(virtual memory stat)的简称, 显示系统各种性能指标,包括内存使用情况、CPU、进程、块 I/O 等。
可以指定间隔时间(秒)和报告次数。例如,每秒报告一次,共报告五次:
root@jpzhang-dev:~# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b 交换 空闲 缓冲 缓存 si so bi bo in cs us sy id wa st
0 0 0 10905632 222008 11675420 0 0 0 3 1 1 1 0 99 0 0
0 0 0 10905632 222008 11675420 0 0 0 0 2992 3643 1 0 99 0 0
0 0 0 10905560 222008 11675420 0 0 0 0 1273 2433 0 0 100 0 0
0 0 0 10905560 222008 11675420 0 0 0 1400 1409 2512 0 0 99 0 0
0 0 0 10905560 222008 11675420 0 0 0 0 1248 2397 0 0 100 0 0
关键指标分析
- procs(进程)
- r:运行队列中的进程数(等待运行的进程数)如果这个数值大于系统的 CPU 核心数,说明系统 CPU 过载;
- b:不可中断睡眠状态的进程数,高值可能表示 I/O 问题或资源争用;
- memory(内存)
- swpd:已使用的交换内存,高值表示物理内存不足,系统正在使用交换内存;
- free:空闲内存,低值可能表示内存使用过高;
- buff & cache:用作缓冲区和缓存的内存。一般情况下,系统会尽量使用可用内存进行缓存,以提高性能;
- swap(交换)
- si:从磁盘交换到内存的交换输入量(swap in);
- so:从内存交换到磁盘的交换输出量(swap out); si 和 so:非零值表示系统正在使用交换内存,由于物理内存不足导致。高的 si 或 so 值表示内存不足,需要增加物理内存或减少内存消耗。
- io(I/O)
- bi:块设备的块输入量(块读取);
- bo:块设备的块输出量(块写入); 高值表示大量的磁盘 I/O 操作,可能存在磁盘瓶颈;
- system(系统)
- in:每秒的中断数,包括时钟中断,高值可能表示硬件或驱动程序问题;
- cs:每秒的上下文切换数,高值可能表示进程间的频繁切换,通常与高 r 值有关;
- cpu
- us:用户态的 CPU 时间百分比,高值表示用户进程消耗大量 CPU 资源,如果系统整体运行良好,这不一定是问题;
- sy:内核态的 CPU 时间百分比,高值表示内核进程消耗大量 CPU 资源,如果超过 20%,需要进一步分析内核的 I/O 处理效率,可能需要优化内核配置或硬件;
- id:空闲的 CPU 时间百分比,低值表示 CPU 使用率高;
- wa:等待 I/O 的 CPU 时间百分比,恒定高值表示 CPU 大部分时间在等待 I/O 操作,可能存在磁盘瓶颈,这意味着 CPU 大部分时间处于空闲状态,因为任务在等待磁盘 I/O 时被阻塞;
- st:被虚拟机使用的 CPU 时间百分比,高值表示虚拟化环境中,宿主机的资源不足;
2.4 mpstat -P ALL 1
用于监控和报告各个 CPU 的使用情况。使用 mpstat -P ALL 1 命令,可以每秒打印一次所有 CPU 的详细使用情况,这对于检查 CPU 使用是否存在不平衡以及识别单个 CPU 过热问题非常有帮助。
以下是该命令的具体使用和输出解释:
root@jpzhang-dev:~# mpstat -P ALL 1
Linux 5.4.0-186-generic (jpzhang-dev) 07/01/24 _x86_64_ (16 CPU)
14:52:45 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
14:52:46 all 0.31 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.69
14:52:46 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 8 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
14:52:46 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:52:46 15 4.08 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 95.92
输出解释
- CPU:CPU ID 及所有 CPU 的总和(all);
- %usr:用户态 CPU 使用率(不包括 nice 优先级);
- %nice:nice 优先级用户态 CPU 使用率;
- %sys:内核态 CPU 使用率;
- %iowait:CPU 等待 I/O 操作时间百分比;
- %irq:硬中断处理时间百分比;
- %soft:软中断处理时间百分比;
- %steal:虚拟机窃取的 CPU 时间百分比;
- %guest:虚拟 CPU 时间百分比;
- %gnice:虚拟机中 nice 优先级 CPU 时间百分比;
- %idle:CPU 空闲时间百分比;
负载分析
- 检查各 CPU 的使用情况
- 通过比较不同 CPU 的 %usr、%sys 和 %idle 值,可以判断是否存在负载不均衡。
- 例如:
- 如果某个 CPU 的 %usr 或 %sys 明显高于其他 CPU,这可能表示单线程应用程序正在占用该 CPU。高的 %iowait 值表示该 CPU 正在等待 I/O 操作,可能存在磁盘或网络瓶颈。如果某个 CPU 的 %idle 值明显低于其他 CPU,说明该 CPU 比其他 CPU 更忙。
- 识别单个 CPU 过热单个 CPU 使用率高(例如 %usr 或 %sys 高于 80%)可以判断单线程应用程序,对于多核系统,这种情况可能导致该 CPU 过热,从而影响整体性能。
- 系统整体负载情况查看 all 行的数据,可以了解整个系统的平均 CPU 使用情况。结合单个 CPU 的数据,可以更全面地了解系统负载是否均衡。
2.5 pidstat 1
pidstat 命令有点类似 top,用于报告各个进程的统计信息,但它打印的是滚动摘要而不是清屏。这对观察一段时间内的模式很有用。
pidstat 命令的基本语法如下:
pidstat [options] [interval [count]]
- interval:每次采样的时间间隔(以秒为单位);
- count:采样的次数;
常用选项:
- -u:报告 CPU 使用情况;包括用户态、系统态、虚拟机等,关键指标如下:
- %usr:用户态 CPU 时间百分比;
- %system:系统态 CPU 时间百分比;
- %guest:虚拟 CPU 时间百分比;
- %CPU:总的 CPU 使用时间百分比;
- -r:报告内存使用情况;关键指标如下:
- minflt/s:每秒次级页面错误数;
- majflt/s:每秒主要页面错误数;
- VSZ:虚拟内存大小;
- RSS:常驻集大小;
- %MEM:内存使用百分比;
- -d:报告 I/O 使用情况;关键指标如下:
- kB_rd/s:每秒读取的 KB 数;
- kB_wr/s:每秒写入的 KB 数;
- kB_ccwr/s:每秒取消的写入 KB 数;
- -p :指定一个或多个进程 ID;
- -h:显示柱状图格式的输出;
root@jpzhang-dev:~# pidstat -r 1
Linux 5.4.0-186-generic (jpzhang-dev) 07/01/24 _x86_64_ (16 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
上面示例,可以分析确认消耗 CPU 的两个 java 进程,%CPU 列是所有 CPU 的总和;1591% 表明该 java 进程消耗了近 16 个 CPU。
2.6 iostat -xz 1
用于监控系统输入/输出设备性能统计信息。使用 iostat -xz 1 命令,可以每秒钟输出一次所有设备的详细性能指标。
iostat -xz 1
- -x:显示扩展的 I/O 统计信息,包括每个设备的 I/O 速率和延迟等详细信息;
- -z:忽略所有零活动的设备;
- 1:每秒钟刷新一次输出;
root@jpzhang-dev:~# iostat -xz 1
Linux 5.4.0-186-generic (jpzhang-dev) 07/01/24 _x86_64_ (16 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.56 0.00 0.75 0.00 0.00 98.68
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
vda 0.00 0.00 0.00 0.00 0.00 0.00 12.00 88.00 13.00 52.00 0.33 7.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.20
平均 CPU 使用情况:
avg-cpu: %user %nice %system %iowait %steal %idle
0.44 0.00 0.13 0.00 0.00 99.44
指标与上文类似,这里不在继续说明。
设备使用情况:
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
vda 0.00 0.00 0.00 0.00 0.00 0.00 12.00 88.00 13.00 52.00 0.33 7.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.20
- r/s:每秒读取请求数;
- w/s:每秒写入请求数;高 r/s 和 w/s 值表示大量的 I/O 活动,可能是由于应用程序高负载或数据库操作引起;
- rkB/s:每秒读取的千字节数;
- wkB/s:每秒写入的千字节数;高 rkB/s 和 wkB/s 值表示大量的数据传输,可能是大文件操作或数据备份等;
- rrqm/s:每秒合并的读取请求数;
- wrqm/s:每秒合并的写入请求数;
- r_await:读取请求的平均等待时间(毫秒);
- w_await:写入请求的平均等待时间(毫秒);高 r_await 和 w_await 值表示 I/O 请求的等待时间较长,可能是磁盘速度慢或 I/O 请求过多阻塞导致的;
- svctm:请求的平均服务时间(毫秒);
- %util:设备利用率,即设备在处理 I/O 请求所花费的时间百分比,值大于 60% 通常会导致性能不佳,但这取决于设备,接近 100% 通常表示饱和;
【注意】对于一个逻辑磁盘而言,其面向多个后端物理磁盘,100% 的利用率并不一定表示所有的后端磁盘都已经达到了饱和状态。这是因为逻辑磁盘可以并行地将 I/O 请求分发到多个后端磁盘上,即使一个后端磁盘已经满负荷运行,其他磁盘可能仍有处理能力。
磁盘 I/O 性能不佳不一定是应用程序本身的问题。通常,系统会采用多种技术来优化磁盘 I/O 的处理,这些技术可以显著减少应用程序因为 I/O 操作而发生的阻塞和延迟,例如:异步 I/O、预读取(Prefetching)、写入缓冲(Write Buffering)、文件系统缓存等。
2.7 free -m
root@jpzhang-dev:~# free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 0
- buffers:用于块设备 I/O 的缓冲区缓存;
- cached:用于文件系统的页面缓存;
buffers 和 cached 接近零:这可能意味着系统正在频繁地从磁盘读取数据,而不是从缓存中读取。这种情况通常会导致更高的磁盘 I/O,从而影响系统性能(使用 iostat 命令确认磁盘 I/O)。
如果系统上使用 ZFS 文件系统,内存使用输出可能会更加复杂。ZFS 有自己的文件系统缓存,free -m 的输出可能无法准确反映这些缓存。
2.8 sar -n DEV 1
有效地监控网络接口的吞吐量,并评估是否达到了网络限制;
sar -n DEV 1
该命令每秒钟显示一次网络设备的统计信息,直到你停止它(通常通过按 Ctrl+C)。
root@jpzhang-dev:~# sar -n DEV 1
Linux 5.4.0-186-generic (jpzhang-dev) 07/01/24 _x86_64_ (16 CPU)
12:00:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
12:00:02 AM eth0 3000.00 4000.00 22000.00 28000.00 0.00 0.00 0.00
12:00:02 AM eth1 1500.00 1800.00 10000.00 12000.00 0.00 0.00 0.00
- IFACE:网络接口名称(例如,eth0,lo);
- rxpck/s:每秒接收的数据包数;
- txpck/s:每秒发送的数据包数;
- rxkB/s:每秒接收的千字节数;
- txkB/s:每秒发送的千字节数;
- rxcmp/s:每秒接收的压缩数据包数;
- txcmp/s:每秒发送的压缩数据包数;
- rxmcst/s:每秒接收的多播数据包数;
负载分析
- 计算网络接口吞吐量
- 接收速率(rxkB/s):22000 kB/s
- 发送速率(txkB/s):28000 kB/s
- eth0:
- 换算为 Mbits/sec
- 28000 kB/s = 28000 * 8 = 224000 Kbits/s = 224 Mbits/s
- 22000 kB/s = 22000 * 8 = 176000 Kbits/s = 176 Mbits/s
- 接收速率:
- 发送速率:
- 比较与网络限制
- 假设 eth0 接口的最大带宽是 1 Gbit/s:1 Gbit/s = 1000 Mbits/s
综上,在这个例子中:eth0 接收速率:176 Mbits/s(远低于 1 Gbit/s),eth0 发送速率:224 Mbits/s(远低于 1 Gbit/s)。
结论:eth0 的接收速率和发送速率都远低于 1 Gbit/s 的限制,因此没有达到网络接口的带宽限制。
2.9 sar -n TCP,ETCP 1
监控 TCP 协议和扩展 TCP 统计信息;
root@jpzhang-dev:~# sar -n TCP,ETCP 1
Linux 5.4.0-186-generic (jpzhang-dev) 07/01/24 _x86_64_ (16 CPU)
16:22:32 active/s passive/s iseg/s oseg/s
16:22:33 4.00 0.00 9.00 9.00
16:22:32 atmptf/s estres/s retrans/s isegerr/s orsts/s
16:22:33 4.00 0.00 0.00 0.00 4.00
关键 TCP 指标:
TCP 统计信息:* active/s:每秒本地(主动)启动的 TCP 连接数;* passive/s:每秒远程(被动)启动的 TCP 连接数;* iseg/s:每秒接收到的 TCP 段数;* oseg/s:每秒发送的 TCP 段数;
扩展 TCP 统计信息:* atmptf/s:每秒尝试失败的 TCP 连接数;* estres/s:每秒重置的 TCP 连接数;* retrans/s:每秒重传的 TCP 段数;* isegerr/s:每秒接收到的错误 TCP 段数;* oseg/s:每秒发送的 TCP 段数;
负载分析
- 检查 TCP 连接的活跃性(active/s 和 passive/s):
- active/s 指发起的连接数。如果该值很高,表示有大量的客户端发起连接请求。passive/s 指接收的连接数。如果该值很高,表示服务器处理了大量的连接请求。
- 检查 TCP 传输情况(iseg/s 和 oseg/s)
- iseg/s 和 oseg/s:高值可能表示有大量的数据在传输,可能会导致网络拥塞。
- 检查 TCP 错误和重传
- atmptf/s:尝试失败的连接数。如果该值不为零,表示有连接失败的情况,可能是由于网络问题或服务器负载过高。
- estres/s:被重置的连接数。如果该值很高,表示有大量的连接被重置,可能是由于网络不稳定或防火墙配置问题。
- retrans/s:重传的 TCP 段数。如果该值很高,可能是网络不可靠(如公共互联网),也可能是服务器负载过重而丢弃数据包。
- isegerr/s:接收到的错误 TCP 段数。如果该值不为零,表示有错误的 TCP 段被接收,可能是网络问题或硬件故障导致。
2.10 top
top - 16:35:41 up 17 days, 7:11, 1 user, load average: 0.01, 0.12, 0.12
任务: 433 total, 1 running, 432 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.4 us, 0.2 sy, 0.0 ni, 99.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 32098.5 total, 10438.8 free, 9969.2 used, 11690.5 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 21147.5 avail Mem
进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
75809 jpzhang 20 0 16.2g 5.4g 591776 S 6.3 17.1 1223:07 java
971 root 20 0 2191672 109964 13420 S 4.0 0.3 633:54.87 sys-layer
175431 jpzhang 20 0 33.4g 560984 342044 S 1.0 1.7 49:51.25 msedge
234474 root 20 0 12836 4512 3400 R 0.7 0.0 0:00.05 top
691 root rt 0 280136 17948 8208 S 0.3 0.1 2:42.47 multipathd
1708 systemd+ 20 0 32528 7240 4600 S 0.3 0.0 54:44.43 redis-server
5486 jpzhang 20 0 1168024 120840 68096 S 0.3 0.4 16:53.62 gnome-terminal-
201216 jpzhang 20 0 85172 69092 18868 S 0.3 0.2 7:07.83 python3.12
226452 root 20 0 0 0 0 I 0.3 0.0 0:00.19 kworker/3:2-events
233760 jpzhang 20 0 1157.3g 108848 72612 S 0.3 0.3 0:07.15 msedge
1 root 20 0 170004 13668 8612 S 0.0 0.0 0:34.54 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.36 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
top 命令整合了我们之前检查过的多个性能指标,缺点是,它不支持滚动输出,这意味着无法持续查看历史数据,而是只能显示当前的系统状态。
感谢您花时间阅读文章!
关注公众号不迷路!
相关推荐
- “版本末期”了?下周平衡补丁!国服最强5套牌!上分首选
-
明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...
- VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"
-
首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...
- 东营交警实名曝光一批酒驾人员名单 88人受处罚
-
齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...
- Qt界面——搭配QCustomPlot(qt platform)
-
这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...
- 大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写
-
老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...
- 测试谷歌VS Code AI 编程插件 Gemini Code Assist
-
用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...
- 顾爷想知道第4.5期 国服便利性到底需优化啥?
-
前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...
- 掌握Visual Studio项目配置【基础篇】
-
1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...
- 还嫌LED驱动设计套路深?那就来看看这篇文章吧
-
随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...
- Visual Studio Community 2022(VS2022)安装图文方法
-
直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...
- Qt添加MSVC构建套件的方法(qt添加c++11)
-
前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...
- Qt为什么站稳c++GUI的top1(qt c)
-
为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...
- qt开发IDE应该选择VS还是qt creator
-
如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...
- Qt 5.14.2超详细安装教程,不会来打我
-
Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...
- Cygwin配置与使用(四)——VI字体和颜色的配置
-
简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- “版本末期”了?下周平衡补丁!国服最强5套牌!上分首选
- VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"
- 东营交警实名曝光一批酒驾人员名单 88人受处罚
- Qt界面——搭配QCustomPlot(qt platform)
- 大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写
- 测试谷歌VS Code AI 编程插件 Gemini Code Assist
- 顾爷想知道第4.5期 国服便利性到底需优化啥?
- 掌握Visual Studio项目配置【基础篇】
- 还嫌LED驱动设计套路深?那就来看看这篇文章吧
- Visual Studio Community 2022(VS2022)安装图文方法
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)