当前位置: 首页 > article >正文

【Elasticsearch从入门到精通】第06篇:Elasticsearch重要系统参数设置——防止启动检查失败

上一篇【第05篇】Elasticsearch配置详解——config.yml核心配置项全解析下一篇【第07篇】Elasticsearch集群安全配置摘要将Elasticsearch部署到生产环境时操作系统层面的参数配置往往是被忽视的关键环节。ES通过Bootstrap Checks机制在启动时强制检测这些参数不通过则直接拒绝启动。本文系统讲解五大核心系统参数禁用swap通过swapoff或bootstrap.memory_lock防止JVM被换出到磁盘、文件描述符上限nofile至少设为65536、虚拟内存映射数vm.max_map_count至少262144避免max virtual memory areas错误、线程数限制nproc设为4096以上以及DNS缓存TTL设置。文末提供一份生产环境检查清单和常见启动错误的解决方案速查表帮助运维人员快速定位和修复问题。一、Bootstrap Checks——ES的安检门1.1 什么是Bootstrap ChecksBootstrap Checks是Elasticsearch在启动阶段执行的一系列系统环境检测。它的设计理念很简单“如果你在生产环境部署ES有些系统参数必须达标否则我拒绝启动。”这个机制的核心逻辑network.host 设为非回环地址 → ES判断为生产模式 → 执行全部Bootstrap Checks → 任一项不通过 → 启动失败输出错误信息如果是开发模式network.host: 127.0.0.1相同的检测项只会以警告形式出现在日志中不会阻止启动。1.2 完整的检查清单以下是ES在生产模式下强制检查的所有项目检查项阈值要求不通过时的典型错误信息堆内存大小Xms Xmxinitial heap size [X] not equal to maximum heap size [Y]文件描述符 65535max file descriptors [4096] is too low, increase to at least [65535]虚拟内存vm.max_map_count 262144max virtual memory areas vm.max_map_count [65530] is too low线程数nproc 4096max number of threads [1024] is too low内存锁定如开启bootstrap.memory_lock需生效memory locking requested but not enabledMMap计数系统限制足够system call filters failed to installDNS缓存JVM参数已设置不会阻止启动但影响性能每个问题都可能让集群在生产环境中出事故。下面逐一深入讲解。二、禁用Swap——别让JVM被换出去2.1 为什么Swap对ES是致命的Swap是操作系统在物理内存不足时把不常用的内存页面写入磁盘来释放物理内存的机制。对普通应用来说这可能是救命稻草但对ES来说就是性能杀手。问题链条OS发现内存不够把JVM堆中的部分对象换出到磁盘JVM进行垃圾回收时需要访问这些对象访问被换出的对象 → 触发磁盘I/O → 单次访问延迟从纳秒级暴增到毫秒级GC停顿时间因此大幅增长 → 集群判定节点无响应 → master将其踢出集群分片重新分配 → 大量数据搬移 → 整个集群雪崩一句话总结Swap会让一个本来好好的ES节点突然变成幽灵节点。2.2 临时禁用Swap最简单直接的方式——立即生效但重启后失效# 立即关闭所有swapsudoswapoff-a# 验证是否已关闭free-h# 输出中 Swap 行应显示 total 为 0B2.3 永久禁用Swap编辑/etc/fstab注释掉所有swap相关行# 查看当前swap配置cat/etc/fstab|grepswap# 注释掉swap挂载行在行首加 #sudosed-i/swap/ s/^/#//etc/fstab# 验证修改cat/etc/fstab重启后确保swap不再自动挂载。2.4 降低swap倾向次选方案如果你出于某种原因不能完全禁用swap比如服务器还跑着其他应用可以降低内核将内存换出到swap的倾向# 查看当前值默认60cat/proc/sys/vm/swappiness# 设为1只在极端内存压力下才使用swapsudosysctl-wvm.swappiness1# 永久生效echovm.swappiness1|sudotee-a/etc/sysctl.conf注意这只能降低swap发生的概率不能完全杜绝。对ES节点来说禁用swap才是正解。2.5 使用bootstrap.memory_lock锁定内存最彻底的方案是让ES锁定自己的内存禁止OS将其换出步骤一在elasticsearch.yml中启用bootstrap.memory_lock:true步骤二在/etc/security/limits.conf中允许elasticsearch用户锁定内存# 添加如下行elasticsearch - memlock unlimited步骤三如果使用systemd管理ESRPM/DEB安装默认方式需要在service文件中设置# /usr/lib/systemd/system/elasticsearch.service [Service] LimitMEMLOCKinfinity然后重载systemd配置sudosystemctl daemon-reloadsudosystemctl restart elasticsearch验证内存锁定是否生效# 查看ES日志应该有如下输出grepmemory_lock/var/log/elasticsearch/elasticsearch.log# 或通过API检查curl-XGEThttp://localhost:9200/_nodes?filter_path**.mlockallpretty# 输出中 mlockall: true 表示成功2.6 三种方案对比方案永久性彻底性副作用推荐场景swapoff -a否重启失效彻底无临时验证/etc/fstab注释是彻底其他应用也无法使用swap专用ES服务器vm.swappiness1是不彻底很小共享服务器bootstrap.memory_lock是对ES进程彻底需配合limits.conf生产环境首选最佳组合/etc/fstab禁用swap bootstrap.memory_lock: true双保险。三、文件描述符设置——别让文件不够用拖垮3.1 为什么ES需要这么多文件描述符ES底层使用Lucene每个Lucene索引由多个Segment组成每个Segment包含多个文件。一个节点可能同时打开数千个文件索引文件倒排索引、正排索引、词向量等网络连接HTTP客户端连接 transport节点间连接系统文件日志、配置等在高并发场景下文件描述符不够用的结果是新的搜索请求无法处理TCP连接被拒绝。3.2 设置文件描述符上限ES要求至少65536建议设置为65536或更高# 临时设置当前会话生效ulimit-n65536# 验证ulimit-n永久设置——编辑/etc/security/limits.conf# 添加以下行elasticsearch - nofile65536elasticsearch - nofile65536如果要设置更高比如128000直接改数字即可。部分云服务器或容器环境可能需要额外调整。3.3 Systemd 环境下的额外配置如果用systemd管理ESlimits.conf的设置在部分发行版上可能不生效需要在service文件中显式声明# /usr/lib/systemd/system/elasticsearch.service [Service] LimitNOFILE65536然后sudosystemctl daemon-reloadsudosystemctl restart elasticsearch四、虚拟内存设置——vm.max_map_count 调整4.1 这个参数是干什么的vm.max_map_count限制了进程可以拥有的内存映射区域memory map areas的最大数量。ES确切说是Lucene使用mmap来读取索引文件每个映射区域对应一个索引文件片段。为什么要262144ES默认使用hybridfs混合文件系统来存储数据底层严重依赖mmap。当你的索引分片数量较多时很容易超过默认的65530。ES官方推荐的262144是一个经过验证的保守值大多数场景下够用。4.2 设置方法# 查看当前值cat/proc/sys/vm/max_map_count# 输出65530默认值ES认为不够# 临时设置sudosysctl-wvm.max_map_count262144# 永久设置echovm.max_map_count262144|sudotee-a/etc/sysctl.conf# 重新加载sysctl配置sudosysctl-p验证sysctlvm.max_map_count# 输出vm.max_map_count 262144 ✓4.3 不设置会怎样如果你在生产模式下启动ES而不设置这个参数你会看到ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]ES直接拒绝启动没有任何商量余地。这在运维自动化脚本中非常常见——脚本部署完ES后发现启动失败排了半天发现是这个参数没设。五、线程数限制——nproc 配置5.1 ES为什么需要这么多线程ES内部使用大量线程来处理并行任务搜索线程池处理入站搜索请求写入线程池处理bulk index请求刷新线程定期刷写translog合并线程后台进行segment合并网络线程处理transport层通信在多核服务器上ES会根据CPU核数自动调整线程池大小。如果操作系统限制了单用户的线程数上限ES分分钟就触顶。5.2 设置方法# 临时查看当前限制ulimit-u# 编辑 /etc/security/limits.confelasticsearch - nproc4096部分环境尤其是Docker容器中需要设置为更高比如elasticsearch - nproc81925.3 Systemd环境额外设置# /usr/lib/systemd/system/elasticsearch.service [Service] LimitNPROC4096六、DNS缓存设置——被忽视的性能杀手6.1 问题背景ES节点之间通过transport层通信每次建立连接都会进行DNS解析。Java默认会永久缓存DNS解析结果networkaddress.cache.ttl -1永不失效。这在以下场景中会造成问题云环境中节点IP可能发生变化容器环境中Pod重启后IP变更DNS故障转移机制失效ES官方建议将DNS缓存TTL设置为正值平衡缓存效率和变更感知能力。6.2 设置方法在jvm.options中添加# 正向DNS缓存TTL秒 -Dnetworkaddress.cache.ttl60 # 反向DNS缓存TTL秒 -Dnetworkaddress.cache.negative.ttl10也可以通过环境变量设置exportES_JAVA_OPTS$ES_JAVA_OPTS-Dnetworkaddress.cache.ttl60 -Dnetworkaddress.cache.negative.ttl10解读cache.ttl60正向DNS解析结果缓存60秒之后重新解析negative.ttl10DNS解析失败的结果只缓存10秒快速重试七、实战案例生产环境系统参数检查与修复7.1 场景某个电商搜索系统计划从ES 6.x升级到7.x。新集群部署在3台CentOS 8服务器上64GB内存安装完ES RPM包后启动失败。错误日志如下ERROR: [3] bootstrap checks failed [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] [3]: max number of threads [1024] for user [elasticsearch] is too low, increase to at least [4096]7.2 诊断脚本创建一个诊断脚本快速检查所有系统参数#!/bin/bash# es_system_check.sh - Elasticsearch系统参数检查脚本echoecho Elasticsearch 系统参数检查echo# 1. Swap检查echo-e\n[1] Swap检查SWAP_TOTAL$(free-m|awk/^Swap:/ {print $2})if[$SWAP_TOTAL-gt0];thenecho❌ 警告Swap总量为${SWAP_TOTAL}MB建议禁用elseecho✅ Swap已禁用fi# 2. swappiness检查SWAPPINESS$(cat/proc/sys/vm/swappiness)if[$SWAPPINESS-gt1];thenecho⚠️ vm.swappiness $SWAPPINESS建议设为1或禁用swapelseecho✅ vm.swappiness $SWAPPINESSfi# 3. 文件描述符检查NOFILE$(ulimit-n)if[$NOFILE-lt65535];thenecho❌ 文件描述符上限$NOFILE需要 65535elseecho✅ 文件描述符上限$NOFILEfi# 4. max_map_count检查MAX_MAP$(cat/proc/sys/vm/max_map_count)if[$MAX_MAP-lt262144];thenecho❌ vm.max_map_count $MAX_MAP需要 262144elseecho✅ vm.max_map_count $MAX_MAPfi# 5. 线程数检查NPROC$(ulimit-u)if[$NPROC-lt4096];thenecho❌ 线程数上限$NPROC需要 4096elseecho✅ 线程数上限$NPROCfi# 6. 内存锁定检查MEMLOCK$(ulimit-l)if[$MEMLOCK!unlimited];thenecho⚠️ 内存锁定限制$MEMLOCK如果启用bootstrap.memory_lock需设为unlimitedelseecho✅ 内存锁定unlimitedfiecho-e\necho 检查完毕echo7.3 修复步骤# 步骤1禁用Swapsudoswapoff-asudosed-i/swap/ s/^/#//etc/fstab# 步骤2设置vm.max_map_countechovm.max_map_count262144|sudotee-a/etc/sysctl.confsudosysctl-p# 步骤3设置文件描述符和线程数sudotee-a/etc/security/limits.confEOF elasticsearch - nofile 65536 elasticsearch - nproc 4096 elasticsearch - memlock unlimited EOF# 步骤4配置systemd service文件sudomkdir-p/etc/systemd/system/elasticsearch.service.dsudotee/etc/systemd/system/elasticsearch.service.d/override.confEOF [Service] LimitNOFILE65536 LimitNPROC4096 LimitMEMLOCKinfinity EOF# 步骤5重载systemd并重启ESsudosystemctl daemon-reloadsudosystemctl restart elasticsearch# 步骤6验证启动成功sudosystemctl status elasticsearchcurl-XGEThttp://localhost:9200/_cluster/health?pretty7.4 一键修复脚本将以上修复步骤整合为一个一键脚本方便在多台服务器上批量执行#!/bin/bash# es_system_fix.sh - Elasticsearch生产环境一键参数修复脚本set-eecho开始修复ES生产环境系统参数...# 禁用swapecho→ 禁用Swap...sudoswapoff-a2/dev/null||trueifgrep-qswap/etc/fstab;thensudocp/etc/fstab /etc/fstab.bak.$(date%Y%m%d)sudosed-i/swap/ s/^/#//etc/fstabfi# max_map_countecho→ 设置vm.max_map_count...echovm.max_map_count262144|sudotee-a/etc/sysctl.conf/dev/nullsudosysctl-wvm.max_map_count262144/dev/null# 降低swappinessecho→ 设置vm.swappiness...echovm.swappiness1|sudotee-a/etc/sysctl.conf/dev/nullsudosysctl-wvm.swappiness1/dev/null# limits.confecho→ 设置limits.conf...grep-qelasticsearch.*nofile/etc/security/limits.conf||\echoelasticsearch - nofile 65536|sudotee-a/etc/security/limits.confgrep-qelasticsearch.*nproc/etc/security/limits.conf||\echoelasticsearch - nproc 4096|sudotee-a/etc/security/limits.confgrep-qelasticsearch.*memlock/etc/security/limits.conf||\echoelasticsearch - memlock unlimited|sudotee-a/etc/security/limits.conf# systemd overrideecho→ 设置systemd override...sudomkdir-p/etc/systemd/system/elasticsearch.service.dsudotee/etc/systemd/system/elasticsearch.service.d/override.conf/dev/nullEOF [Service] LimitNOFILE65536 LimitNPROC4096 LimitMEMLOCKinfinity EOFsudosystemctl daemon-reloadecho✅ 所有系统参数修复完成请重新登录或重启ES生效。八、常见启动错误速查表错误信息根因修复命令max file descriptors [4096] is too low文件描述符不够ulimit -n 65536 修改limits.confmax virtual memory areas vm.max_map_count [65530] is too lowmmap计数不够sysctl -w vm.max_map_count262144max number of threads [1024] is too low线程数限制过低ulimit -u 4096 修改limits.confmemory locking requested but not enabled未允许内存锁定设置memlock unlimited systemd LimitMEMLOCKsystem call filters failed to installseccomp过滤失败检查内核版本是否支持或临时设置bootstrap.system_call_filter: falseinitial heap size not equal to maximumjvm.options 中 Xms ! Xmx修改jvm.options确保两者值一致could not find java未找到Java设置JAVA_HOME或使用ES自带的JDKcannot allocate memory物理内存不足或JVM堆太大减小Xmx或增加物理内存九、最佳实践总结先跑检查脚本再启动ES——部署ES前运行系统参数诊断脚本把所有参数都调到合规后再启动不要等启动失败再排查。swap必须干掉——对ES专用服务器swap不仅没用反而是定时炸弹。禁用swap 启用bootstrap.memory_lock是最佳组合。nofile设置65536起步——根据实际索引量和并发量适当调高到128000甚至更高只多不少。vm.max_map_count设为262144——这是ES官方验证过的最小安全值。如果分片特别多可以设到更大的值如524288。所有系统参数配置纳入自动化——不要手动改来改去。用Ansible Playbook、Salt State或者至少一份Shell脚本统一管理所有ES节点的系统参数。Docker/Kubernetes环境要格外关注——容器中的ulimit默认值通常很低务必在compose文件或Pod spec中显式声明资源限制。systemd override 优先于 limits.conf——在systemd管理的系统中service文件中的LimitNOFILE等参数优先级高于/etc/security/limits.conf两者都要配。DNS缓存TTL设置为60秒——既避免每次都做DNS解析的性能损耗又保证能在IP变更时及时感知。重启ES后验证Bootstrap Checks——用GET _nodes或查看启动日志确认所有检查项通过不要想当然。建立运维文档——把系统参数要求和修复步骤写成文档团队共享。新来的运维同学不应该再踩一遍老坑。上一篇【第05篇】Elasticsearch配置详解——config.yml核心配置项全解析下一篇【第07篇】Elasticsearch集群安全配置

相关文章:

【Elasticsearch从入门到精通】第06篇:Elasticsearch重要系统参数设置——防止启动检查失败

上一篇【第05篇】Elasticsearch配置详解——config.yml核心配置项全解析 下一篇【第07篇】Elasticsearch集群安全配置 摘要 将Elasticsearch部署到生产环境时,操作系统层面的参数配置往往是被忽视的关键环节。ES通过Bootstrap Checks机制在启动时强制检测这些参数&…...

AI Agent架构选型实战指南:从行为复杂度到协作粒度

1. 这不是理论课,是我在真实项目里踩坑后画出的AI Agent架构地图你有没有过这种感觉:刚学完LangChain,信心满满想搭个“智能客服”,结果写到第三层条件分支就发现逻辑像毛线团——用户问“查订单”,系统要先判断是否登…...

Python机器学习模型部署实战:从训练到生产环境

Python机器学习模型部署实战:从训练到生产环境 引言 作为从Python转向Rust的后端开发者,我深刻体会到机器学习模型部署的重要性。一个优秀的模型如果不能成功部署到生产环境,其价值将大打折扣。本文将从实战角度出发,详细介绍Pyth…...

KAG增强生成、AlphaMath推理与Offloading协同架构

1. 项目概述:一场聚焦模型轻量化与推理边界的深度技术切片 “AI Innovations and Insights 23: KAG, AlphaMath, and Offloading”这个标题,乍看像是一场行业峰会的分论坛名称,但拆开来看,它其实是一份高度凝练的技术路线图——KA…...

通过Taotoken的CLI工具一键配置Python开发环境

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken的CLI工具一键配置Python开发环境 对于希望快速开始使用大模型API的Python开发者而言,手动配置API密钥、B…...

Donut端到端票据识别:小票图像直出结构化JSON

1. 项目概述:一张小票,如何让AI“看懂”并结构化输出?你有没有试过把超市小票拍张照,想让手机自动提取“总金额:89.50”“商品:牛奶2”“时间:2024-03-12 18:23”这些信息?不是OCR识…...

Python机器学习实战路线图:从EDA到模型部署的工业级路径

1. 这不是“速成课”,而是一份我带过37个转行学员后重写的Python机器学习实战路线图 你点开这篇,大概率正站在两个路口之间:一边是刷了三个月Kaggle入门赛却卡在特征工程上动弹不得,另一边是翻烂了《统计学习方法》却连一个能跑通…...

NotebookLM风格崩塌的7个隐性信号:从语义漂移到角色失焦,一文诊断并修复

更多请点击: https://intelliparadigm.com 第一章:NotebookLM风格崩塌的诊断元框架 当NotebookLM在真实知识工作流中表现出响应失焦、引用漂移、上下文断裂或语义坍缩等现象时,“风格崩塌”并非界面缺陷,而是底层多模态对齐机制失…...

AI Agent预测式防御:毫秒级故障预判与柔性干预

1. 项目概述:这不是又一个“AI Agent故障复盘”,而是一次对失败根因的工程化反演 你有没有遇到过这样的情况:花两周时间精心设计了一个AI Agent流程,接入了最新版的LLM API,配置了多层工具调用和记忆机制,测…...

1756-PA75R直流冗余电源模块

1756-PA75R直流冗余电源模块产品特点1756-PA75R是为ControlLogix系统设计的高可靠直流冗余电源模块,支持热更换与均流控制。其核心特点如下:支持双机并联,构建真正的N1冗余系统。具备自动均流技术,避免单模块过载。支持带电热更换…...

云飞云 + SolidWorks服务器 = 10人研发共享方案,附硬件配置清单

10人研发团队用SolidWorks搞设计,是中小制造企业最常见的场景——模型要画、装配要搭、渲染要跑、图纸要存,每天8小时高强度运转。传统模式下每台工作站动辄2~3万元,10台就是25万起步;软件授权10套License,年费轻松30~…...

Monk AI小样本分类实战:用几十张图快速构建可用AI模型

1. 项目概述:用 Monk AI 做分类,但只喂它一小块数据——这到底在解决什么问题?“Classification Using Monk AI by Using a Slice of the Dataset”这个标题乍看平平无奇,甚至有点拗口,但如果你在工业质检、医疗影像初…...

原神抽卡数据分析神器:告别盲目抽卡,用数据掌控你的欧皇之路

原神抽卡数据分析神器:告别盲目抽卡,用数据掌控你的欧皇之路 【免费下载链接】genshin-wish-export Easily export the Genshin Impact wish record. 项目地址: https://gitcode.com/GitHub_Trending/ge/genshin-wish-export 你是否曾在原神抽卡时…...

用随机森林实现手写大写字母识别的完整实践

1. 项目概述:用随机森林搞定手写信件识别,这事儿比你想象中更接地气 “How To Perform Letter Recognition in Python Using Random Forest Classifier”——这个标题乍看像教科书里的章节名,但实际拆开来看,它直指一个非常典型、…...

AI驱动的数据操作系统:重构标注、治理与质量闭环

1. 项目概述:当数据标注不再只是“画框”和“打标签”“State-of-the-Art Data Labeling With a True AI-Powered Data Management Platform”——这个标题乍看像一句市场宣传语,但拆开来看,它其实精准锚定了当前AI工程落地最卡脖子的环节&am…...

如何快速配置FanControl风扇控制:从安装到优化的完整指南

如何快速配置FanControl风扇控制:从安装到优化的完整指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending…...

用随机森林实现手写英文字母识别(Python实战)

1. 项目概述:用随机森林搞定手写信件识别,这事儿比你想象中更接地气 “How To Perform Letter Recognition in Python Using Random Forest Classifier”——这个标题乍看像教科书里的章节名,但实际拆开来看,它直指一个非常具体、…...

HS2汉化补丁终极指南:打造完美中文游戏体验的完整解决方案

HS2汉化补丁终极指南:打造完美中文游戏体验的完整解决方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2汉化补丁是针对Honey Select 2游戏的专…...

诸侯割据:不是只有坏处——有些阶段,它是“必要的恶”

在主流的管理话语里,“诸侯割据”几乎是个贬义词。它让人联想到山头主义、资源内耗、总部失控。但有没有一种可能:它在某些阶段、某些条件下,恰恰是企业活下去、长起来的“必要代价”? 一、先看好处:诸侯式架构的“四…...

AI Agent 运行时革命:从上下文牢笼到可审计的会话日志

1. 这不是新赛道,是 runtime 层的“操作系统时刻”来了 你有没有试过让一个 AI 代理连续工作四十分钟?不是闲聊,而是真正在查资料、调 API、写代码、改文档——一环扣一环地推进一个复杂任务。我去年就带着团队跑过这样一个销售线索深度分析 …...

淘宝淘金币自动化终极指南:如何用5分钟完成30分钟日常任务

淘宝淘金币自动化终极指南:如何用5分钟完成30分钟日常任务 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi …...

机器学习生产化:从Notebook到可运维ML服务的实战路径

1. 项目概述:当模型走出笔记本,真正开始“呼吸”现实空气 你有没有经历过这样的时刻:Jupyter Notebook里所有指标都闪闪发亮,AUC 0.92,F1 0.87,交叉验证稳如泰山;业务方点头签字,上线…...

Supermask:冻结权重+二值掩码的神经网络子结构发现方法

1. 什么是 Supermasks?——不是“超级面具”,而是神经网络里的“先天直觉” 你有没有试过教一个刚学会走路的孩子认苹果?你不需要从零开始教他光谱分析、细胞结构或者植物分类学,只要拿个红彤彤的苹果在他眼前晃一晃,再…...

python旅游分享点评网系统

目录同行可拿货,招校园代理 ,本人源头供货商项目概述核心功能技术栈扩展功能建议项目亮点项目技术支持源码获取详细视频演示 :同行可合作点击我获取源码->获取博主联系方式->进我个人主页-->同行可拿货,招校园代理 ,本人源头供货商 项目概述 Python旅游分…...

NoFences:免费开源的Windows桌面整理神器,让杂乱图标瞬间归位

NoFences:免费开源的Windows桌面整理神器,让杂乱图标瞬间归位 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为Windows桌面上堆积如山的图标而烦…...

python旅游出行指南系统

目录同行可拿货,招校园代理 ,本人源头供货商项目概述核心功能技术实现代码示例(路线规划)扩展方向适用场景源码获取详细视频演示 :同行可合作点击我获取源码->获取博主联系方式->进我个人主页-->同行可拿货,招校园代理 ,本人源头供货…...

python拼装模型商城销售管理系统

目录同行可拿货,招校园代理 ,本人源头供货商项目概述核心功能技术栈特色亮点适用场景项目技术支持源码获取详细视频演示 :同行可合作点击我获取源码->获取博主联系方式->进我个人主页-->同行可拿货,招校园代理 ,本人源头供货商 项目概述 Python拼装模型商…...

兜兜转转又回到大浪浪的S05,遥看当年黑丝在,今朝尽染满头霜。

偶然翻看CSDN头像,恍然惊觉已是十五载光阴。2011年拍照于此设头像。初来S05,一路辗转S01,兜兜转转,历经浮沉,如今终究重回最初的S05。这十几年来,方寸代码天地,见证了我的所有成长与蜕变。一路行…...

如何在3分钟内免费解决Windows HEIC缩略图预览难题

如何在3分钟内免费解决Windows HEIC缩略图预览难题 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是否经常遇到iPhone拍摄的照…...

【设计模式 14】责任链:谁来拍板

这一课讲责任链模式。什么在变:处理链路经常调整,审批层级和条件经常变。怎么挡:处理者串成链,每个只决定"签还是传"。那张采购申请单在三个部门之间转了十七天。 十七天。买的东西是一批进口检测设备,总价两…...