260112-Linux-vmstat查看系统上下文切换是否正常

linux vmstat 1 如何查看线程上下文切换 是否正常 4核8GB的Ubuntu20.04系统

vmstat 1 输出中,cs 列 表示每秒上下文切换次数,结合 4 核 8GB Ubuntu 20.04 系统,判断方法如下:

1. 核心指标:cs 列数值

1
vmstat 1

输出示例:

plaintext

1
2
3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 329452 81560 583244 0 0 0 1 112 234 1 1 98 0 0
  • cs:每秒上下文切换次数

2. 正常范围参考

系统负载状态 正常 cs 值范围
轻负载(无高并发进程) 几百~几千
中负载(常规服务运行) 几千~几万
高负载(高并发 / 多线程程序) 几万~几十万(需结合其他指标)

4 核 8GB Ubuntu 20.04:无高并发服务时,cs 稳定在 1000 以内 属正常;运行 Web / 数据库等服务,cs 几万内且无性能卡顿也可接受。

3. 异常判断 & 排查

(1)异常信号

  • cs 数值 突然飙升(如从几千涨到几十万)
  • 伴随 %us(用户 CPU)/ %sy(内核 CPU)升高、r(等待运行进程数)持续大于核数

(2)排查工具

1
2
3
4
5
# 1. 查看进程上下文切换详情(cswch自愿,nvcswch非自愿)
pidstat -w 1

# 2. 查看线程级别上下文切换
pidstat -wt 1

4. 关键结论

cs 无绝对 “正常值”,核心看 是否稳定 + 是否伴随性能问题(卡顿、延迟高)。4 核 8GB 系统,无高并发时 cs
过高(如几十万)大概率异常,需排查多线程程序或系统瓶颈~

sudo vmstat 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b 交换 空闲 缓冲 缓存 si so bi bo in cs us sy id wa st
53 0 1280 172096 53668 2899092 0 0 0 0 4590 16048 91 6 3 0 0
70 0 1280 177264 53668 2899464 0 0 0 0 4925 14850 92 6 2 0 0
63 0 1280 187488 53668 2899124 0 0 0 0 4414 14884 90 7 2 0 0
70 0 1280 176072 53668 2900104 0 0 0 0 4490 15137 92 6 3 0 0
70 0 1280 179400 53676 2894888 0 0 0 28 4790 15637 89 8 4 0 0
46 0 1280 172116 53676 2895848 0 0 0 14940 4193 13649 91 6 2 0 0
70 0 1280 182940 53676 2896604 0 0 0 0 4455 14426 91 7 3 0 0
71 0 1280 177308 53676 2896372 0 0 0 0 5094 14102 92 7 1 0 0
74 0 1280 180472 53676 2896664 0 0 0 0 4543 13903 92 6 3 0 0
70 0 1280 182832 53684 2896832 0 0 0 52 4816 14569 89 8 3 0 0
70 0 1280 185948 53684 2896720 0 0 0 52 4701 13914 92 7 2 0 0
123 0 1280 176496 53684 2897016 0 0 0 0 4412 13588 91 8 2 0 0
70 0 1280 178112 53684 2897772 0 0 0 0 4518 13660 91 7 1 0 0

260106-WinCC 通信连接的状态变量

https://www.ad.siemens.com.cn/productportal/prods/hmi/wincc/q8_faq/wincc_connectionstates.html#biaoti02

WinCC 通信连接的状态变量

WinCC V7.5 通信连接状态变量

WinCC 从V7.5 版本之后,对于所有的通信连接,可以自动创建通信连接的状态变量,用于显示通信连接的状态或者控制通信的断/开。

在变量管理器中选择所要组态的通信连接,点击鼠标右键(①),在菜单中选择“创建启用/禁用变量”(②)。可以看到在内部变量“ConnectionStates”变量组下,相应连接的2个状态变量已经被创建(③)。变量名的格式为“@Connectionname@ConnectionStateEx”
和 “@Connectionname@ForceConnectionStateEx”,数据类型都是“无符号32位值”。

img

其中, “@Connectionname@ForceConnectionStateEx” 用来建立/断开通信连接,设置为1:建立连接,设置为0:断开连接。此变量默认初始值设置为1。

“@Connectionname@ConnectionStateEx” 用来反馈通信连接状态, 值为1时代表连接已经建立,值为0时代表连接已经断开。

WinCC V7.3 通信连接状态变量

WinCC V7.3及其之后的版本中的“SIMATIC S7-1200,S7-1500 Channel”通道支持通信连接状态变量,但组态步骤和WinCC
V7.5有所不同。具体组态方法如下:

需要在连接下手动创建变量 “@Connectionname@ForceConnectionState” 和 “@Connectionname@ConnectionState”。

img

这两个变量用法和WinCC V7.5相同, “@Connectionname@ForceConnectionState” 用来建立/断开通信连接,设置为1:建立连接,设置为0:断开连接。此变量默认初始值设置为1。
“@Connectionname@ConnectionState” 用来反馈通信连接状态, 值为1时代表连接已经建立,值为0时代表连接已经断开。

注意,这里的系统变量使用PLC中没有用到的地址,只是占用相应的PLC地址而不会实际改变PLC地址的值。例如,设置上图中的变量“@S71500@ForceConnectionState”为1,“S71500”连接会建立,但PLC中的MD204的值不会随着变为1。

260106-wincc采集数据-监控OMS-连接是否有效

一句话总结(ConnectionState)

WinCC 自带“@连接名@ConnectionState”系统变量,
0=离线 1=在线;
把它做在画面上或脚本里,就能第一时间知道设备是否掉线,
比盯着过程值可靠得多。

添加变量

确认状态 ConnectionStateEx

wincc oms+采集数据,采集通道连接如何触发重新连接

ConnectionEstablishMode

@ConnectionEstablishMode 并不是在 WinCC 的“变量管理”里手动建出来的普通变量,
而是通道在创建时自动生成的“系统变量”。
想找到它,只要打开:
WinCC 资源管理器 → 变量管理 →
展开你正在用的那条 S7 通道(如“OMS+”或“SIMATIC S7-1200/1500”)→
再展开下面的某个“连接”→
右侧窗口里就能看到名字以“@”开头的系统变量列表,
其中就有 @ConnectionEstablishMode(数据类型 DWORD,默认值 1)[29^]。
如果列表里没看到,把列宽拉大一点或把“系统变量”筛选打开即可。

在 WinCC 里,OMS+ 通道本身没有“一键重连”按钮,想让 S7-1200/1500 的采集通道在断线后重新握手,有两种办法——“让它自己连”或“手动踢它一脚”。
自动重连(推荐)
把系统变量 @ConnectionEstablishMode 置为 1(缺省就是 1),通道会每 4 s 自动尝试重建连接,无需干预 。
手动触发重连
① 强制断开:把 @ForceConnectionState 先写 0,已建立的连接会立即断开;
② 再次建立:再把 @ForceConnectionState 写 1,通道立即按组态参数重新连接 。
如果同时想换 IP 或访问点,可先把新地址写入 @AlternateConnectionAddress,再把 @ForceConnectionAddress 切换一次
0→1,也能达到“断开-重连”的效果 。
脚本里一般用 C 动作或 VBS 给这几个内部变量赋新值即可,触发一次执行一次重连流程

251224-MongoDB-SlowQuery慢查询定位

1. 直接读 system.profile(最常用)


打开数据库级别的 Profiling

1
2
use vatti
db.setProfilingLevel(1, 500); -- 记录 >50 ms 的操作

2. 可看到慢查询字段

1
2
3
4
db.system.profile.find({millis:{$gte:500}})
.sort({ts:-1})
.limit(1000)
.pretty();

251210-google-chrome-bookmark-谷歌浏览器导出书签

谷歌浏览器如何导出书签
?众所周知谷歌浏览器是一款强大的浏览工具,这款浏览器界面简洁,可以安装各式各样好用的插件,我们还能对浏览器进行个性化设置,在这款浏览器里添加的书签可以导出来,在其他的浏览器里打开,不少用户刚开始使用这款浏览器,还不清楚如何将书签导出。本篇文章就给大家带来轻松导出谷歌浏览器书签导出详细步骤,有需要的朋友不妨来跟着我一起学习看看。

img

谷歌浏览器书签导出详细步骤

1、第一步,我们打开谷歌浏览器电脑版,然后在浏览器页面右上角点击打开三个竖点图标

img

2、第二步,打开三个竖点图标之后,我们在菜单列表中打开“书签和清单”选项,再在子菜单列表中打开“书签管理器
”选项

img

3、第三步,在书签管理器页面中,我们点击打开页面右上角的管理图标

img

4、第四步,打开书签管理器页面的管理图标之后,我们在菜单列表中打开“导出书签”选项

img

5、第五步,最后在文件夹页面中,我们选择好保存位置,再设置好书签文件名,最后点击“保存”选项即可

img

以上就是《谷歌浏览器如何导出书签》的详细内容啦,感谢大家的阅读,希望这篇文章可以帮助到大家。

251118-NTP-Ubuntu时间同步(chrony)

Ubuntu 20.04 客户端指向内网 NTP 服务器

执行脚本

1
2
3
4
5
6
7
8
sudo vim /etc/chrony/chrony.conf
server 192.168.0.100 iburst
sudo systemctl restart chrony
# 强制一步到位
sudo chronyc -a makestep

# 查看是否已指向 192.168.0.100 且出现 * 号
chronyc sources -v

在 Ubuntu 20.04 上,若要让系统只通过内网 IP 地址与内部 NTP 服务器同步时间,最简、最稳的做法是:
① 停用/禁用自带 timesyncd → ② 安装 chrony → ③ 在配置文件里只写内网 server 地址 → ④ 重启服务并验证。
下面给出完整命令,复制即可用(假设内网 NTP-Server IP 为 192.168.0.100)。


  1. 停用 timesyncd(防止冲突)

1
2
sudo systemctl stop systemd-timesyncd
sudo systemctl disable systemd-timesyncd

  1. 安装并启用 chrony(推荐,轻量、抗网络抖动)

1
2
3
sudo apt update
sudo apt install -y chrony
sudo systemctl enable --now chrony

  1. 指定内网服务器

1
sudo vim /etc/chrony/chrony.conf

清空原有 server 行,只保留(或新增):

1
server 192.168.0.100 iburst

保存后执行:

1
sudo systemctl restart chrony

  1. 立即强制同步 & 验证

1
2
3
4
5
# 强制一步到位
sudo chronyc -a makestep

# 查看是否已指向 192.168.0.100 且出现 * 号
chronyc sources -v

输出示例:

1
^* 192.168.0.100   3   6   377   45   +2us[  +2us] +/-  3ms

看到 ^*只通过内网


  1. 防火墙(可选)

如果本机启用了 UFW,需放行 UDP 123:

1
sudo ufw allow out 123/udp

  1. 客户端批量脚本(任意 Ubuntu 20.04)

1
2
3
4
5
6
7
8
#!/bin/bash
srv=192.168.0.100
sudo systemctl stop systemd-timesyncd && sudo systemctl disable systemd-timesyncd
sudo apt update && sudo apt install -y chrony
echo "server $srv iburst" | sudo tee /etc/chrony/chrony.conf
sudo systemctl enable --now chrony
sudo chronyc -a makestep
chronyc sources -v

保存为 set-ntp.shchmod +x set-ntp.sh && ./set-ntp.sh 即可。

至此,Ubuntu 20.04 将通过内网地址 192.168.0.100 完成时间同步,不再访问外部 NTP 源

251118-NTP(systemd-timesyncd)配置内网时间同步

systemd-timesyncd 这个服务,怎么同步内网服务

Ubuntu 20.04 默认就用 systemd-timesyncd 做时间同步,无需安装任何包,只要改两行配置即可让它只走内网 NTP
下面给出最小步骤(假设内网 NTP 服务器 IP 为 192.168.0.100),复制就能用。


  1. 确认服务已启用

1
systemctl status systemd-timesyncd

若看到 Active: inactive (dead),先启动它:

1
2
sudo systemctl unmask systemd-timesyncd
sudo systemctl enable --now systemd-timesyncd

  1. 指定内网服务器

编辑配置文件

1
sudo vim /etc/systemd/timesyncd.conf

[Time] 段改成:

1
2
3
[Time]
NTP=192.168.0.100
FallbackNTP=

FallbackNTP= 留空,防止断网时去连外网)

保存后执行:

1
sudo systemctl restart systemd-timesyncd

  1. 立即触发同步 & 验证

1
2
sudo systemctl restart systemd-timesyncd   # 重启即触发
timedatectl timesync-status # 看是否已指向 192.168.0.100

输出示例:

1
2
3
4
Server: 192.168.0.100 (192.168.0.100)
Poll interval: 32s
Leap: normal
...

看到 Server: 行就是只走内网


  1. 常用排障

  • 时间差太大(>1000s)同步失败:

    1
    2
    sudo timedatectl set-time "2025-11-28 12:00:00"   # 先手动拉到 1s 内
    sudo systemctl restart systemd-timesyncd
  • 防火墙:本机需放行出站 UDP 123

    1
    sudo ufw allow out 123/udp

【方案一】增加定时调度器,定时重启时间同步(系统定时任务crontab)

sudo systemctl restart systemd-timesyncd # 重启即触发

1
2
3
4
5
crontab -e

# 每小时的 0 分、45 分各跑一次,相当于 45 min 间隔
0,45 * * * * /bin/systemctl restart systemd-timesyncd

【方案二】增加定时调度器【替代方案】干脆让 systemd 自己定时(更简洁):

1
2
3
4
5
6
7
8
9
10
# /etc/systemd/system/refresh-timesyncd.timer
[Unit]
Description=Refresh systemd-timesyncd every 45 min

[Timer]
OnBootSec=5min
OnUnitActiveSec=45min

[Install]
WantedBy=timers.target
1
2
3
4
# /etc/systemd/system/refresh-timesyncd.service
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart systemd-timesyncd

然后

1
2
sudo systemctl daemon-reload
sudo systemctl enable --now refresh-timesyncd.timer

即可实现“每 45 分钟重启一次 timesyncd”,无需再写 crontab。


  1. 一键脚本(客户端批量)
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
srv=192.168.0.100
sudo tee /etc/systemd/timesyncd.conf <<EOF
[Time]
NTP=$srv
FallbackNTP=
EOF
sudo systemctl unmask systemd-timesyncd
sudo systemctl enable --now systemd-timesyncd
sudo systemctl restart systemd-timesyncd
timedatectl timesync-status

保存为 set-timesyncd.shchmod +x set-timesyncd.sh && ./set-timesyncd.sh 即可。

至此,systemd-timesyncd通过内网地址完成时间同步,无需额外安装 chrony 或 ntp 包