前言
最近办公环境没有无线网,只能拿手机热点来凑合一下,没想到短短2天时间,居然用完了原本套餐中的20G。本来以为是电脑平台网页内容比较丰富,一些广告和预加载的视频消耗了绝大多数流量。
可是,当新办理的3天10G流量包又被耗尽后,终于还是忍不住穷人的好奇心,本着栽都栽了,总得知道谁挖了坑的原则,就想着打开活动监视器瞅一眼有没有嫌疑人,也好沷一盆狗血过去以解心头之恨。
诶,你说就巧了,刚出手就逮住一个不怀好意的进程,“nsurlsessiond”,肉眼可见不到1分钟发了20M的包。
好在春意惭浓之际,咱也没有荒废手脚工夫,学了一套叫PDCA的内功心法,正好就拿来审一审这偷包的小贼。
目录
概述
利用PDCA管理模型实践关停macOS后台流量杀手的道与术。
关于PDCA模型
关键词
- 管理方法
- 持续改进
- 四个阶段
- Plan(计划)
- Do(执行)
- Check(检查)
- Act(行动)
目的
旨在帮助组织和个人通过循环性的过程,持续改进其业务、流程和产品。
展开说说
Plan·计划
形成一个初步的计划,并将此计划拆分成可具体执行的动作。
可用的模型(GPT献计)
-
SMART目标:
- SMART目标是具体(Specific)、可衡量(Measurable)、可达成(Achievable)、相关(Relevant)和有时限(Time-bound)的目标。通过设定SMART目标,可以确保目标清晰明确,有助于提高执行的可行性。
-
SWOT分析:
- SWOT分析是评估组织或项目的优势(Strengths)、劣势(Weaknesses)、机会(Opportunities)和威胁(Threats)的方法。通过SWOT分析,可以识别内部和外部环境中的关键因素,帮助确定改进的重点和方向。
-
5W1H分析:
- 5W1H分析涉及回答一系列问题:谁(Who)、什么(What)、何时(When)、为什么(Why)、如何(How)和在哪里(Where)。这种分析方法有助于全面理解问题的本质和影响因素。
-
鱼骨图(Ishikawa图):
- 鱼骨图是一种问题分析工具,也称为因果图或Ishikawa图。它将问题分解为不同的因素,包括人员、方法、机器、材料、环境和测量等,帮助识别根本原因并制定解决方案。
-
PDCA表格:
- PDCA表格是一种用于记录PDCA循环的工具,用于追踪计划、执行、检查和行动阶段的活动和结果。它有助于组织和跟踪改进项目的进度和效果。
本文就GPT给出的第一条方法论SMART目标来作出计划。
计划之后的结论(节点1)
关键目标1 ^ec32ea
在电脑接入手机热点后的半小时内(有时限),利用操作系统自带的监控工具(具体),粗略查看分钟量级内(可衡量)发送网络包(相关)数量最多(可达成)的进程。
关键步骤1|[[#^d524f0]]
Do·执行
执行过程中可参考的原则(GPT)
在PDCA模型的执行阶段,虽然没有特定的原则,但有一些关键的指导方针和实践方法,有助于确保执行阶段的顺利进行,并为后续的检查和行动阶段奠定基础。以下是一些原则性的指导:
-
清晰的沟通和责任分配:
- 在执行阶段,确保团队成员之间的沟通顺畅,每个人都清楚自己的责任和角色。明确指定任务的执行者,确保所有人都了解任务的要求和期限。
-
有效的资源管理:
- 确保所需的资源(包括人力、物力、财力等)得到充分分配和利用。这包括合理安排时间、预算、设备和技术支持等,以支持项目或任务的顺利执行。
-
持续监控和跟踪:
- 在执行阶段,定期监控项目或任务的进度和执行情况。这可以通过设置里程碑、跟踪关键绩效指标、定期会议等方式来实现,以确保计划按时和按质量执行。
-
灵活应变和问题解决:
- 在执行过程中可能会出现各种问题和挑战,团队需要具备灵活应变的能力,及时解决问题,确保计划顺利执行。这包括识别问题、制定应对策略、调整计划等。
-
持续改进和学习:
- 在执行阶段,团队应该不断寻求改进和学习的机会,尝试新的方法和技术,以提高工作效率和质量。这可以通过经验总结、知识分享、培训等方式来实现。
-
记录和反馈:
- 记录执行阶段的关键信息和结果,并提供及时的反馈。这有助于团队和管理层了解项目的进展情况和问题,及时做出调整和决策。
这些原则和指导方针有助于确保PDCA模型的执行阶段顺利进行,确保项目或任务按计划实施,并为后续的检查和行动阶段奠定基础。
执行及记录(节点2)
关键步骤1 ^d524f0
在监视器中找到了关键目标|[[#^ec32ea]]中消耗流量的头号进程: 'nsurlsessiond'。
假设
将该进程kill掉,就会终结流量偷跑。
验证
几分钟后该进程会自动重启,重新大量发送网络包。
Check·检查
检查阶段中的原则或方法(GPT)
-
收集数据和信息:
- 在检查阶段,团队会收集关于实施阶段的数据和信息,这可能涉及到执行任务的进度、项目的绩效指标、客户反馈等等。
-
分析执行结果:
- 团队会对收集到的数据和信息进行分析,比较实际结果与预期目标之间的差距,以确定执行阶段的效果如何。
-
评估过程和成果:
- 检查阶段的重点是评估项目或任务的执行过程和结果,以确保它们符合预期目标和要求。这可能涉及到审查项目文档、分析关键绩效指标、评估客户满意度等等。
-
识别问题和机会:
- 在检查阶段,团队会识别任何执行过程中出现的问题或改进机会。这包括识别偏差、识别根本原因、确定问题的严重性等等。
-
制定改进计划:
- 基于检查阶段的评估结果,团队会制定具体的改进计划,以纠正问题、改进流程或提高绩效水平。这可能包括调整工作流程、提供额外培训、改进沟通机制等等。
-
持续改进:
- 检查阶段是一个持续改进的过程,它不仅涉及对当前项目的评估,还包括对PDCA循环过程本身的改进。团队应该寻求持续改进的机会,以提高工作效率和质量。
对关键步骤1进行检查评估(节点3)
关键步骤1|[[#^d524f0]]
- 分析执行结果
- kill掉后会触发进程重启,推测该进程有后台常驻服务
- 改进计划
- 找出该进程'nsurlsessiond'背后的服务,通过停止该服务来实现流量限制。
修正目标1 ^b00580
- 查看macOS命令
launchctl
列出服务及启停操作参数 - 找出
nsurlsessiond
进程的后台服务 ^3d11e7 - 将步骤1|[[#^3d11e7]]中的服务临时停止(stop但保留enable)
- 查看
Activity Monitor
中进程是否还存在
Act·行动
关于Do和Act两个阶段的区别讨论(GPT)
在PDCA模型中,DO阶段和ACT阶段都涉及到实际的执行和行动,但它们在目的和时机上有一些不同之处。
-
DO阶段(执行阶段):
- DO阶段是指执行计划中制定的具体行动和任务。在这个阶段,团队将计划中制定的方案付诸实施,按照预定的时间表和程序执行工作。DO阶段主要关注的是计划的具体实施,包括资源分配、任务分配、执行计划等。
-
ACT阶段(行动阶段):
- ACT阶段是指根据CHECK阶段的结果,采取相应的行动来纠正问题、改进流程或实现优化。在这个阶段,团队根据CHECK阶段的检查和评估结果,确定需要采取的具体行动,并实施这些行动以改善现状。
简而言之,DO阶段更侧重于计划的实际执行,而ACT阶段更侧重于根据检查阶段的评估结果采取相应的行动。DO阶段是计划的执行过程,而ACT阶段是对检查阶段结果的回应和调整过程。在PDCA循环中,DO和ACT阶段紧密联系,共同构成了持续改进的循环。
画重点
- Do是对Plan计划的实际执行
- Act是对Check检查结果的回应
- Check有点类似复盘,而Act更像是补刀
复盘后的重新执行
修正步骤1 ^927b60
-
找出后台服务
$ launchctl ... list Lists information about services. start Starts the specified service. stop Stops the specified service if it is running. ... $ launchctl list | grep nsurlsessiond - 0 com.apple.nsurlsessiond
-
停止后台服务
$ launchctl stop com.apple.nsurlsessiond
-
检查服务状态
# 停止服务时无报错,但查看状态时却提示有两个并行的服务 $ launchctl print com.apple.nsurlsessiond | grep -E "^\tstate" Unrecognized target specifier, did you mean system/com.apple.nsurlsessiond_privileged gui/501/com.apple.nsurlsessiond Usage: launchctl print <domain-target> | <service-target> <service-target> takes a form of <domain-target>/<service-id>. Please refer to `man launchctl` for explanation of the <domain-target> specifiers.
-
先查看用户级别的服务运行的PID
$ launchctl print gui/501/com.apple.nsurlsessiond | grep pid pid = 30158
-
查看进程
nsurlsessiond
的PID从macOS
Activity Monitor
中也可以看到该进程ID为30158
![[Activity_Monitor_PID.png]] -
确认进程
nsurlsessiond
与服务gui/501/com.apple.nsurlsessiond
是对应关系 -
查看监视器,进程已消失
第一轮PDCA结果
- P - 根据现象进行假设,并制定出计划:关键目标1[[#^ec32ea]]
- D - 执行关健目标1,过程记录为:关键步骤1[[#^d524f0]]
- C - 对步骤1的结果进行检查和评估,修正后得出:修正目标1[[#^b00580]]
- A - 步骤修正后进行验证:修正步骤1[[#^927b60]]
PDCA整体循环结构
阶段性结论
- 命中进程:
nsurlsessiond
- 对应服务有两个
- 用户级别:
gui/501/com.apple.nsurlsessiond
- 系统级别:
system/com.apple.nsurlsessiond_privileged
- 用户级别:
- 停止对应的服务
launchctl stop com.apple.nsurlsessiond
后进程消失
但是
一段时间后进程仍然死灰复燃!!!!
PDCA循环2
假设进程是由系统级别的服务,也就是system/com.apple.nsurlsessiond_privileged
控制的,那么只停止用户态的服务,确实只能短暂杀掉进程。
关键目标2
以超级用户权限结束服务system/com.apple.nsurlsessiond_privileged
,并用launchctl
的print
参数配合grep
持续查看服务状态,同时监控进程的存留。
关键步骤2
$ sudo launchctl stop system/com.apple.nsurlsessiond_privileged
Password:
$ launchctl print system/com.apple.nsurlsessiond_privileged | grep state
state = running
job state = running
修正目标2
考虑到停止服务launchctl stop com.apple.nsurlsessiond
后进程有一段下线时间,权宜之计,在脚本中以while
循环判断进程存在或者服务启动时自动执行launchctl stop
的操作。
修正步骤2
#!/bin/bash
while true; do
if launchctl print gui/501/com.apple.nsurlsessiond | grep -E "^\tstate" | grep not >/dev/null 2>&1; then
echo $(date "+%Y%m%d %H:%M:%S")
echo 'nsurlsessiond is not running.'
launchctl print gui/501/com.apple.nsurlsessiond | grep state | sed 's/\t//g'
ps -ef | grep nsurlsessiond | grep -v grep
else
echo $(date "+%Y%m%d %H:%M:%S")
echo 'nsurlsessiond is running.'
launchctl stop com.apple.nsurlsessiond
launchctl stop system/com.apple.nsurlsessiond_privileged
launchctl stop gui/501/com.apple.nsurlsessiond
echo 'service stopped'
fi
echo '-----'
echo
sleep 3
done
果然,运维的尽头都是脚本😭😭
总结
本文以PDCA模型为指导,以近乎杀鸡焉用牛刀之势,做了一次高射炮打蚊子的典型伪案例。解决问题的术和道,总是玲琅满目,也不存在什么优劣之分,作为一次成功的演习性尝试,重点并不在于在日常或者工作上有什么质的突破,也不妄想凑够寥寥几字就能够一鸣惊人,关键是体验一种乐趣,从细枝末节寻找自我实现,或者是正反馈,亦是闭环激励,总是求得心理上的专注,也不免在桎梏之中,与鸟兽为伍,作困局之争。
后记
其实最有效的克敌之法,莫过于以子之予攻子之盾。Apple macOS自己的省电功能可以使得iCloud在不外接电源的情况下暂停后台同步功能。
所以,无代码的替代方案便是:拔掉电源。