<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>PPTW技术分享</title><link>https://pptw.com/</link><description>专业IT技术知识及技巧分享网站</description><item><title>CentOS下如何安装Sniffer软件</title><link>https://pptw.com/jishu/790007.html</link><description>&lt;p&gt;
                            &lt;/p&gt;&lt;p&gt;在CentOS系统下安装Sniffer软件，可以按照以下步骤进行：&lt;/p&gt;
&lt;h3&gt;方法一：使用yum安装&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;更新系统包&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo yum update -y
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装Elasticsearch和Kibana（如果尚未安装）&lt;/strong&gt;
Sniffer通常与Elasticsearch和Kibana一起使用，因此需要先安装它们。&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo yum install elasticsearch kibana -y
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动并启用Elasticsearch和Kibana服务&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo systemctl start elasticsearch
sudo systemctl &lt;span class=&quot;hljs-built_in&quot;&gt;enable&lt;/span&gt; elasticsearch
sudo systemctl start kibana
sudo systemctl &lt;span class=&quot;hljs-built_in&quot;&gt;enable&lt;/span&gt; kibana
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装Sniffer&lt;/strong&gt;
使用pip安装Sniffer。&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo pip install sniffer
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置Sniffer&lt;/strong&gt;
编辑Sniffer的配置文件（通常位于&lt;code&gt;/etc/sniffer/sniffer.conf&lt;/code&gt;），根据需要进行配置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;运行Sniffer&lt;/strong&gt;
使用以下命令启动Sniffer：&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo sniffer -c /etc/sniffer/sniffer.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;方法二：使用源码编译安装&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装依赖包&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo yum groupinstall &lt;span class=&quot;hljs-string&quot;&gt;&quot;Development Tools&quot;&lt;/span&gt; -y
sudo yum install python-pip python-devel -y
sudo yum install libpcap-devel -y
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;下载Sniffer源码&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;git &lt;span class=&quot;hljs-built_in&quot;&gt;clone&lt;/span&gt; https://github.com/your-repo/sniffer.git
&lt;span class=&quot;hljs-built_in&quot;&gt;cd&lt;/span&gt; sniffer
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;编译并安装Sniffer&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;python setup.py install
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置Sniffer&lt;/strong&gt;
编辑Sniffer的配置文件（通常位于&lt;code&gt;/etc/sniffer/sniffer.conf&lt;/code&gt;），根据需要进行配置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;运行Sniffer&lt;/strong&gt;
使用以下命令启动Sniffer：&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sniffer -c /etc/sniffer/sniffer.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;注意事项&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;权限问题&lt;/strong&gt;：某些操作可能需要root权限，确保使用&lt;code&gt;sudo&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;防火墙设置&lt;/strong&gt;：确保防火墙允许Elasticsearch和Kibana的端口（默认是9200和5601）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络配置&lt;/strong&gt;：确保网络配置正确，以便Sniffer能够捕获和分析网络流量。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过以上步骤，你应该能够在CentOS系统上成功安装并运行Sniffer软件。如果有任何问题，请参考Sniffer的官方文档或社区支持。&lt;/p&gt;</description><pubDate>Thu, 22 Jan 2026 12:18:06 +0800</pubDate></item><item><title>centos jenkins部署的日志如何查看</title><link>https://pptw.com/jishu/790006.html</link><description>&lt;p&gt;
                            &lt;/p&gt;&lt;p&gt;在CentOS系统中，Jenkins的日志文件通常位于&lt;code&gt;/var/log/jenkins&lt;/code&gt;目录下。要查看Jenkins的日志，你可以使用以下方法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用&lt;code&gt;cat&lt;/code&gt;命令查看整个日志文件：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo &lt;span class=&quot;hljs-built_in&quot;&gt;cat&lt;/span&gt; /var/log/jenkins/jenkins.log
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;使用&lt;code&gt;tail&lt;/code&gt;命令实时查看日志文件的最后几行：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo &lt;span class=&quot;hljs-built_in&quot;&gt;tail&lt;/span&gt; -f /var/log/jenkins/jenkins.log
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;使用&lt;code&gt;grep&lt;/code&gt;命令搜索特定的关键字或错误信息：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo grep &lt;span class=&quot;hljs-string&quot;&gt;&quot;关键字&quot;&lt;/span&gt; /var/log/jenkins/jenkins.log
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;使用&lt;code&gt;less&lt;/code&gt;或&lt;code&gt;more&lt;/code&gt;命令分页查看日志文件：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo less /var/log/jenkins/jenkins.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo more /var/log/jenkins/jenkins.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;请注意，你可能需要使用&lt;code&gt;sudo&lt;/code&gt;命令获取管理员权限才能查看日志文件。如果你没有安装Jenkins，可以参考Jenkins官方文档进行安装：https://www.jenkins.io/doc/book/installing/linux/&lt;/p&gt;</description><pubDate>Thu, 22 Jan 2026 12:17:14 +0800</pubDate></item><item><title>怎样提高centos jenkins的稳定性</title><link>https://pptw.com/jishu/790005.html</link><description>&lt;p&gt;
                            &lt;/p&gt;&lt;p&gt;&lt;strong&gt;提升 CentOS 上 Jenkins 稳定性的实用方案&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一 基础环境与依赖&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;选择 &lt;strong&gt;Jenkins LTS&lt;/strong&gt; 版本，优先使用 &lt;strong&gt;OpenJDK 11 或更高版本&lt;/strong&gt;；在 &lt;strong&gt;CentOS 7&lt;/strong&gt; 上若默认是 &lt;strong&gt;Java 8&lt;/strong&gt;，需安装并更新默认 Java：
&lt;ul&gt;
&lt;li&gt;安装：&lt;code&gt;yum install -y java-11-openjdk-devel&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;切换：&lt;code&gt;alternatives --config java&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;若遇到新版插件或依赖的 &lt;strong&gt;SSL/TLS&lt;/strong&gt; 兼容问题，升级 &lt;strong&gt;OpenSSL 1.1.1+&lt;/strong&gt;（如安装 &lt;code&gt;openssl11&lt;/code&gt; 与 &lt;code&gt;openssl11-libs&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;使用官方仓库安装并导入 GPG，减少依赖链问题：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;curl -fsSL https://pkg.jenkins.io/redhat-stable/jenkins.repo | tee /etc/yum.repos.d/jenkins.repo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;启动前确保系统为最新：&lt;code&gt;yum update -y&lt;/code&gt;，并准备好持久化目录与备份策略。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;二 资源与 JVM 调优&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;硬件基线：生产建议至少 &lt;strong&gt;4 核 CPU + 8GB 内存&lt;/strong&gt;，更优为 &lt;strong&gt;8 核 16GB+&lt;/strong&gt;；构建日志与制品建议使用 &lt;strong&gt;SSD&lt;/strong&gt; 降低 I/O 瓶颈。&lt;/li&gt;
&lt;li&gt;合理设置 &lt;strong&gt;JVM 堆&lt;/strong&gt;（避免频繁 GC 或 OOM）：
&lt;ul&gt;
&lt;li&gt;编辑 &lt;code&gt;/etc/sysconfig/jenkins&lt;/code&gt;，设置如：&lt;code&gt;JENKINS_JAVA_OPTIONS=&quot;-Xms2048m -Xmx4096m&quot;&lt;/code&gt;（根据内存与负载调整，通常不超过物理内存的 &lt;strong&gt;50%~70%&lt;/strong&gt;，为系统和其他进程预留空间）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;控制 &lt;strong&gt;并发构建数&lt;/strong&gt;，使其与 CPU/内存/磁盘 IO 能力匹配，避免资源争用导致节点失响应。&lt;/li&gt;
&lt;li&gt;精简运行负载：禁用 &lt;strong&gt;不必要的插件/服务&lt;/strong&gt;，减少启动与运行期内存占用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;三 存储 构建与网络&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设置构建与制品的 &lt;strong&gt;保留策略&lt;/strong&gt;（如限制保留天数/构建个数），并定期清理旧构建与工作空间，防止 &lt;strong&gt;磁盘空间耗尽&lt;/strong&gt; 引发异常。&lt;/li&gt;
&lt;li&gt;监控磁盘使用（如 Disk Usage 插件），及时归档与清理大文件（日志、缓存、镜像层）。&lt;/li&gt;
&lt;li&gt;优化 &lt;strong&gt;Git&lt;/strong&gt; 相关操作：对大仓库适当 &lt;strong&gt;延长克隆/检出超时&lt;/strong&gt;，并使用浅克隆/部分克隆降低网络与时间成本。&lt;/li&gt;
&lt;li&gt;保障 &lt;strong&gt;网络质量与带宽&lt;/strong&gt;，减少依赖下载与制品上传的抖动与超时。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;四 架构与高可用&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;采用 &lt;strong&gt;Master–Agent（分布式构建）&lt;/strong&gt;：将构建任务分发到多个 &lt;strong&gt;Agent&lt;/strong&gt;，降低 &lt;strong&gt;Master&lt;/strong&gt; 负载，提升吞吐与容错。&lt;/li&gt;
&lt;li&gt;在 &lt;strong&gt;Master 前部署负载均衡器（Nginx/HAProxy）&lt;/strong&gt;，对外提供统一入口并实现健康检查与故障转移。&lt;/li&gt;
&lt;li&gt;建立 &lt;strong&gt;备份与恢复&lt;/strong&gt; 机制（定期备份 &lt;code&gt;JENKINS_HOME&lt;/code&gt; 与关键配置），并进行恢复演练，缩短故障恢复时间。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;五 监控 维护与故障排查&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;启用 &lt;strong&gt;监控与告警&lt;/strong&gt;：使用性能/监控类插件（如 Performance Plugin）观察 &lt;strong&gt;响应时间、构建队列、内存/CPU、磁盘 IO&lt;/strong&gt; 等指标，设置阈值告警。&lt;/li&gt;
&lt;li&gt;统一 &lt;strong&gt;日志与诊断&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;Jenkins 日志：&lt;code&gt;/var/log/jenkins/jenkins.log&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;systemd 日志：&lt;code&gt;journalctl -u jenkins.service&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;常见异常包括：&lt;strong&gt;Java 版本不兼容&lt;/strong&gt;、&lt;strong&gt;端口冲突（默认 8080）&lt;/strong&gt;、&lt;strong&gt;文件权限不足&lt;/strong&gt;、依赖库缺失等，按日志定位并修复。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;维护与升级策略：
&lt;ul&gt;
&lt;li&gt;定期 &lt;strong&gt;更新 Jenkins 与插件&lt;/strong&gt;（先备份、再灰度/窗口期升级），并移除 &lt;strong&gt;未使用插件&lt;/strong&gt; 减少攻击面与内存开销。&lt;/li&gt;
&lt;li&gt;如系统依赖复杂或升级困难，可考虑 &lt;strong&gt;Docker 化部署&lt;/strong&gt;，便于迁移与回滚：&lt;code&gt;docker run -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home jenkins/jenkins:lts&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 22 Jan 2026 12:16:14 +0800</pubDate></item><item><title>Debian Hadoop 资源管理技巧</title><link>https://pptw.com/jishu/790004.html</link><description>&lt;p&gt;
                            &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Debian 上 Hadoop 资源管理实用技巧&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一 架构与关键组件&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ResourceManager（RM）&lt;/strong&gt;：集群资源仲裁者，内置可插拔&lt;strong&gt;调度器&lt;/strong&gt;（Fair/Capacity）与&lt;strong&gt;ApplicationManager&lt;/strong&gt;，负责全局资源分配与作业生命周期管理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NodeManager（NM）&lt;/strong&gt;：单节点代理，按 RM 分配启动 &lt;strong&gt;Container&lt;/strong&gt;，并持续上报资源使用与容器状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ApplicationMaster（AM）&lt;/strong&gt;：每个应用一个 AM，与 RM 协商资源，并将资源进一步分配给应用内任务。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核心要点&lt;/strong&gt;：调度器决定“谁得到资源、得到多少”；NM 负责“本机资源隔离与执行”；AM 负责“应用级资源编排”。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;二 调度与队列策略&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;选择调度器&lt;/strong&gt;：多用户共享建议用&lt;strong&gt;Fair Scheduler&lt;/strong&gt;或&lt;strong&gt;Capacity Scheduler&lt;/strong&gt;，按业务划分队列、设置权重与优先级，避免资源争抢。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;队列与配额&lt;/strong&gt;：为不同团队/作业类型创建队列，配置&lt;strong&gt;容量配额、最大资源、ACL 与抢占策略&lt;/strong&gt;，保障高优先级作业稳定获得资源。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;资源预留&lt;/strong&gt;：对关键作业设置&lt;strong&gt;预留&lt;/strong&gt;，在高峰期为特定队列/应用保留资源，避免被瞬时大作业挤占。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据本地性优化&lt;/strong&gt;：优先将计算调度到数据所在节点或同机架，减少跨网络传输，显著缩短作业时间。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;三 容器与节点资源配置&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;关键 YARN 参数与作用（示例值需按节点资源与业务调整）：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;yarn.scheduler.minimum-allocation-mb / vcores&lt;/strong&gt;：单个容器最小内存/虚拟核。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;yarn.scheduler.maximum-allocation-mb / vcores&lt;/strong&gt;：单个容器最大内存/虚拟核。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;yarn.nodemanager.resource.memory-mb / cpu-vcores&lt;/strong&gt;：节点可分配给容器的总内存/虚拟核。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;yarn.resourcemanager.am.max-attempts&lt;/strong&gt;：AM 最大重试次数，提升容错。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;节点示例（仅示意）：若节点内存为&lt;strong&gt;16 GB&lt;/strong&gt;、可用&lt;strong&gt;8 核&lt;/strong&gt;，可设置 NM 为&lt;strong&gt;yarn.nodemanager.resource.memory-mb=12288&lt;/strong&gt;（预留系统/OS）、&lt;strong&gt;yarn.nodemanager.resource.cpu-vcores=8&lt;/strong&gt;；容器内存上下限与增量可按作业粒度设置（如 1–8 GB、增量 1 GB）。&lt;/li&gt;
&lt;li&gt;配置片段（yarn-site.xml 示例）：
&lt;ul&gt;
&lt;li&gt;yarn.nodemanager.resource.memory-mb12288&lt;/li&gt;
&lt;li&gt;yarn.nodemanager.resource.cpu-vcores8&lt;/li&gt;
&lt;li&gt;yarn.scheduler.minimum-allocation-mb1024&lt;/li&gt;
&lt;li&gt;yarn.scheduler.maximum-allocation-mb8192&lt;/li&gt;
&lt;li&gt;yarn.scheduler.minimum-allocation-vcores1&lt;/li&gt;
&lt;li&gt;yarn.scheduler.maximum-allocation-vcores8&lt;/li&gt;
&lt;li&gt;yarn.resourcemanager.am.max-attempts2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;计算建议：确保“所有容器内存上限之和 ≤ NM 可分配内存”，并为 OS、HDFS、NM 自身预留充足内存，避免 OOM 与不稳定。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;四 操作系统与 JVM 调优&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;文件描述符与连接数&lt;/strong&gt;：在 &lt;strong&gt;/etc/security/limits.conf&lt;/strong&gt; 提升 &lt;strong&gt;nofile&lt;/strong&gt; 与 &lt;strong&gt;nproc&lt;/strong&gt;，避免“Too many open files/threads”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JVM 堆与 GC&lt;/strong&gt;：在 &lt;strong&gt;hadoop-env.sh&lt;/strong&gt; 中为 &lt;strong&gt;NameNode/DataNode/ResourceManager/NodeManager&lt;/strong&gt; 设置合适的 &lt;strong&gt;-Xmx&lt;/strong&gt;，并结合负载选择 GC 策略；例如：
&lt;ul&gt;
&lt;li&gt;export HDFS_NAMENODE_OPTS=“-Xmx4g”&lt;/li&gt;
&lt;li&gt;export HDFS_DATANODE_OPTS=“-Xmx2g”&lt;/li&gt;
&lt;li&gt;export YARN_RESOURCEMANAGER_OPTS=“-Xmx2g”&lt;/li&gt;
&lt;li&gt;export YARN_NODEMANAGER_OPTS=“-Xmx2g”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络与存储&lt;/strong&gt;：优先使用&lt;strong&gt;万兆以太网&lt;/strong&gt;降低 shuffle/复制瓶颈；&lt;strong&gt;NameNode 建议使用 SSD&lt;/strong&gt; 提升元数据吞吐。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;压缩与 I/O&lt;/strong&gt;：在 &lt;strong&gt;core-site.xml&lt;/strong&gt; 启用高效压缩（如 &lt;strong&gt;Snappy/LZO&lt;/strong&gt;），减少网络与磁盘 I/O。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;五 监控 日志 与容量规划&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;监控与告警&lt;/strong&gt;：通过 &lt;strong&gt;RM Web UI（8088）&lt;/strong&gt;、&lt;strong&gt;NM Web UI（8042）&lt;/strong&gt; 与 &lt;strong&gt;JMX&lt;/strong&gt; 观察队列使用率、容器分配、抢占与失败重试；结合阈值告警，防止“资源黑洞”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日志聚合&lt;/strong&gt;：开启 &lt;strong&gt;日志聚合（Log Aggregation）&lt;/strong&gt;，将各节点 Container 日志集中到 &lt;strong&gt;HDFS&lt;/strong&gt;，便于故障排查与审计。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;容量与扩展&lt;/strong&gt;：定期压测（如 &lt;strong&gt;TestDFSIO&lt;/strong&gt;）评估 &lt;strong&gt;HDFS 读写&lt;/strong&gt;与作业性能；依据增长趋势&lt;strong&gt;横向扩容&lt;/strong&gt; DataNode，必要时调整 &lt;strong&gt;副本数（dfs.replication）&lt;/strong&gt; 与块大小。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全加固&lt;/strong&gt;：为运维账号配置最小权限 &lt;strong&gt;sudo&lt;/strong&gt;；启用 &lt;strong&gt;防火墙（UFW/iptables）&lt;/strong&gt;，仅开放 &lt;strong&gt;SSH（22）&lt;/strong&gt;、&lt;strong&gt;HDFS（50070/50470）&lt;/strong&gt;、&lt;strong&gt;YARN（8088/8042）&lt;/strong&gt;、&lt;strong&gt;JournalNode（8485）&lt;/strong&gt; 等必要端口。&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 22 Jan 2026 12:15:04 +0800</pubDate></item><item><title>Linux下Golang日志监控工具有哪些</title><link>https://pptw.com/jishu/790003.html</link><description>&lt;p&gt;
                            &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Linux下Golang日志监控工具与方案&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一 命令行与系统自带工具&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;实时查看与过滤：使用&lt;strong&gt;tail -f&lt;/strong&gt;实时跟踪日志文件，配合&lt;strong&gt;grep&lt;/strong&gt;按关键字（如“error”）筛选；用&lt;strong&gt;awk/sed/sort/uniq&lt;/strong&gt;做字段提取、替换与统计，快速定位高频错误与异常模式。&lt;/li&gt;
&lt;li&gt;systemd 场景：若应用以&lt;strong&gt;systemd&lt;/strong&gt;托管，使用&lt;strong&gt;journalctl -u your_golang_app.service&lt;/strong&gt;集中查看服务日志，便于排查启动、崩溃与重启等问题。&lt;/li&gt;
&lt;li&gt;多文件与便捷查看：借助&lt;strong&gt;Multitail、Lnav&lt;/strong&gt;对多日志并行跟踪、语法高亮与快捷过滤，提高排查效率。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;二 集中式日志平台&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ELK Stack（Elasticsearch + Logstash + Kibana）&lt;/strong&gt;：适合复杂检索与可视化；&lt;strong&gt;Logstash&lt;/strong&gt;负责采集、过滤与解析，&lt;strong&gt;Elasticsearch&lt;/strong&gt;存储与检索，&lt;strong&gt;Kibana&lt;/strong&gt;构建仪表盘与告警面板。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graylog&lt;/strong&gt;：开箱即用的集中式日志管理，支持多输入、管道处理与灵活告警。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loki + Grafana&lt;/strong&gt;：云原生友好、成本低；用&lt;strong&gt;LogQL&lt;/strong&gt;进行高效查询与聚合，配合&lt;strong&gt;Grafana&lt;/strong&gt;统一展示与面板编排。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;三 指标监控与可视化及告警&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prometheus + Grafana&lt;/strong&gt;：通过&lt;strong&gt;Exporter&lt;/strong&gt;或应用内置**/metrics**暴露指标（如请求数、延迟、错误率），&lt;strong&gt;Prometheus&lt;/strong&gt;抓取存储，&lt;strong&gt;Grafana&lt;/strong&gt;做可视化与阈值面板。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alertmanager&lt;/strong&gt;：与 Prometheus 配套，支持告警分组、抑制与静默，覆盖“日志触发的指标告警”与“业务指标异常”场景。&lt;/li&gt;
&lt;li&gt;第三方观测平台：如&lt;strong&gt;Datadog、New Relic&lt;/strong&gt;，提供托管式日志与指标采集、可视化与告警能力。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;四 Go应用侧日志库与最佳实践&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;结构化日志库：优先使用&lt;strong&gt;zap、logrus、slog&lt;/strong&gt;输出&lt;strong&gt;JSON&lt;/strong&gt;或&lt;strong&gt;Key-Value&lt;/strong&gt;结构化日志，便于检索、聚合与链路追踪。&lt;/li&gt;
&lt;li&gt;日志轮转与保留：使用&lt;strong&gt;logrotate&lt;/strong&gt;定期切割、压缩与归档，避免单文件过大，示例配置可保留&lt;strong&gt;7天&lt;/strong&gt;历史并压缩。&lt;/li&gt;
&lt;li&gt;上下文与链路：在日志中输出&lt;strong&gt;trace_id/request_id&lt;/strong&gt;、&lt;strong&gt;service&lt;/strong&gt;、&lt;strong&gt;instance&lt;/strong&gt;等关键字段，配合&lt;strong&gt;OpenTelemetry&lt;/strong&gt;实现日志-指标-追踪的统一可观测。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;五 选型建议&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;轻量单机与快速排查：优先&lt;strong&gt;tail/grep/awk + journalctl + Multitail/Lnav&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;集中存储与检索分析：选择&lt;strong&gt;ELK&lt;/strong&gt;或&lt;strong&gt;Graylog&lt;/strong&gt;；云原生与低成本优先&lt;strong&gt;Loki&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;指标驱动与阈值告警：采用&lt;strong&gt;Prometheus + Grafana + Alertmanager&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;全托管与少运维：考虑&lt;strong&gt;Datadog/New Relic&lt;/strong&gt;等 SaaS。&lt;/li&gt;
&lt;li&gt;无论选型如何，应用侧务必输出&lt;strong&gt;结构化日志&lt;/strong&gt;并做好&lt;strong&gt;logrotate&lt;/strong&gt;，可显著提升监控与告警的准确性与效率。&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 22 Jan 2026 12:14:15 +0800</pubDate></item><item><title>Debian Hadoop 性能测试工具</title><link>https://pptw.com/jishu/790002.html</link><description>&lt;p&gt;
                            &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Debian Hadoop 性能测试工具与实操指南&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一、工具全景与定位&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;th&gt;工具&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;典型场景&lt;/th&gt;
&lt;th&gt;在 Debian 上的获取与运行&lt;/th&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TestDFSIO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HDFS 顺序读写吞吐与 I/O 基准&lt;/td&gt;
&lt;td&gt;评估 &lt;strong&gt;NameNode/DataNode&lt;/strong&gt; 磁盘与网络对 HDFS 的影响&lt;/td&gt;
&lt;td&gt;Hadoop 自带示例 JAR，直接用 &lt;strong&gt;yarn jar … TestDFSIO&lt;/strong&gt; 运行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TeraSort 套件（TeraGen/TeraSort/TeraValidate）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;大规模排序吞吐与 &lt;strong&gt;MapReduce&lt;/strong&gt; 全链路性能&lt;/td&gt;
&lt;td&gt;集群升级/参数调优后的回归测试&lt;/td&gt;
&lt;td&gt;Hadoop 自带示例 JAR，三阶段命令行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;mrbench&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;大量小作业调度与提交性能&lt;/td&gt;
&lt;td&gt;评估 &lt;strong&gt;JobTracker/ResourceManager/队列&lt;/strong&gt; 压力&lt;/td&gt;
&lt;td&gt;Hadoop 自带示例 JAR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;nnbench&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;NameNode&lt;/strong&gt; RPC 与元数据压力&lt;/td&gt;
&lt;td&gt;元数据规模、并发访问能力评估&lt;/td&gt;
&lt;td&gt;Hadoop 自带示例 JAR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HiBench&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多场景大数据基准（Hadoop/Spark）&lt;/td&gt;
&lt;td&gt;对比不同框架/参数/数据规模&lt;/td&gt;
&lt;td&gt;开源套件，需编译配置后运行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;fio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;操作系统层磁盘 I/O 基准&lt;/td&gt;
&lt;td&gt;排除 HDFS 层，定位 &lt;strong&gt;磁盘/文件系统&lt;/strong&gt; 瓶颈&lt;/td&gt;
&lt;td&gt;Debian: &lt;strong&gt;apt-get install fio&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;nmon&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;节点级 &lt;strong&gt;CPU/内存/磁盘/网络&lt;/strong&gt; 资源监控&lt;/td&gt;
&lt;td&gt;压测期间采集资源曲线，定位瓶颈&lt;/td&gt;
&lt;td&gt;Debian: &lt;strong&gt;apt-get install nmon&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;iperf3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;节点间网络带宽/抖动/丢包&lt;/td&gt;
&lt;td&gt;验证 &lt;strong&gt;机架/交换机&lt;/strong&gt; 带宽与稳定性&lt;/td&gt;
&lt;td&gt;Debian: &lt;strong&gt;apt-get install iperf3&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;以上工具覆盖 &lt;strong&gt;HDFS I/O、MapReduce/调度、NameNode 元数据、系统磁盘、网络&lt;/strong&gt; 等维度，适合在 &lt;strong&gt;Debian&lt;/strong&gt; 上构建标准化压测与监控流程。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;二、快速上手流程&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;环境准备
&lt;ul&gt;
&lt;li&gt;使用 &lt;strong&gt;非 root&lt;/strong&gt; 专用用户部署与运行 Hadoop，避免权限与环境问题；确保集群 &lt;strong&gt;HDFS/YARN&lt;/strong&gt; 健康、节点时间同步。&lt;/li&gt;
&lt;li&gt;安装监控与网络工具：&lt;strong&gt;apt-get install -y nmon iperf3 fio&lt;/strong&gt;；在关键节点规划采集目录与日志留存。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;基线采集（系统层）
&lt;ul&gt;
&lt;li&gt;运行 nmon 采样（示例：每 &lt;strong&gt;10&lt;/strong&gt; 秒一次，共 &lt;strong&gt;40&lt;/strong&gt; 次）：nmon -F baseline.nmon -t -s 10 -c 40；测试结束后用 nmon_analyser 生成图表。&lt;/li&gt;
&lt;li&gt;运行 iperf3 带宽验证（服务端：iperf3 -s；客户端：iperf3 -c &amp;lt;server_ip&amp;gt; -t 30）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;HDFS 吞吐基线（TestDFSIO）
&lt;ul&gt;
&lt;li&gt;写入：yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar TestDFSIO -write -nrFiles &lt;strong&gt;10&lt;/strong&gt; -size &lt;strong&gt;1GB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;读取：yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar TestDFSIO -read -nrFiles &lt;strong&gt;10&lt;/strong&gt; -size &lt;strong&gt;1GB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;清理：yarn jar … TestDFSIO -clean&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;排序与作业混合（TeraSort + mrbench/nnbench）
&lt;ul&gt;
&lt;li&gt;生成数据：yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teragen &lt;strong&gt;10000000000&lt;/strong&gt; /user/terasort/input&lt;/li&gt;
&lt;li&gt;执行排序：yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar terasort /user/terasort/input /user/terasort/output&lt;/li&gt;
&lt;li&gt;验证结果：yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teravalidate /user/terasort/output /user/terasort/validate&lt;/li&gt;
&lt;li&gt;小作业压力：yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar mrbench -numRuns &lt;strong&gt;20&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;元数据压力：yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar nnbench -operation create_write -maps &lt;strong&gt;100&lt;/strong&gt; -reduces &lt;strong&gt;10&lt;/strong&gt; -blockSize &lt;strong&gt;128&lt;/strong&gt; -numberOfFiles &lt;strong&gt;1000&lt;/strong&gt; -replicationFactorPerFile &lt;strong&gt;3&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;结果记录
&lt;ul&gt;
&lt;li&gt;汇总 &lt;strong&gt;吞吐（MB/s）&lt;/strong&gt;、&lt;strong&gt;作业完成时间&lt;/strong&gt;、&lt;strong&gt;99%/95% 延迟&lt;/strong&gt;、&lt;strong&gt;NameNode/DataNode 利用率&lt;/strong&gt;、&lt;strong&gt;网络带宽&lt;/strong&gt; 等关键指标，并与基线对比。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;三、结果分析与瓶颈定位&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;写入受限：若 &lt;strong&gt;HDFS 写入吞吐 ≈ 网络带宽&lt;/strong&gt;，多为网络瓶颈；若写入吞吐接近 &lt;strong&gt;磁盘顺序写&lt;/strong&gt;，多为磁盘/文件系统瓶颈。可结合 nmon 的 &lt;strong&gt;CPU/磁盘/网络&lt;/strong&gt; 面板与 iperf3 带宽验证交叉判断。&lt;/li&gt;
&lt;li&gt;读取受限：读取阶段更依赖 &lt;strong&gt;本地磁盘顺序读&lt;/strong&gt; 与 &lt;strong&gt;数据本地性&lt;/strong&gt;；非本地读取会放大网络影响。结合 nmon 磁盘读吞吐与作业 &lt;strong&gt;DataLocal&lt;/strong&gt; 比例分析。&lt;/li&gt;
&lt;li&gt;调度与元数据：大量小作业（mrbench）或高并发元数据操作（nnbench）下，若作业排队、提交延迟上升，需关注 &lt;strong&gt;YARN 调度器配置、队列资源、NameNode 内存与并发线程&lt;/strong&gt; 等。&lt;/li&gt;
&lt;li&gt;系统层验证：用 &lt;strong&gt;fio&lt;/strong&gt; 对本地磁盘做顺序/随机 I/O 基线，确认是否达到硬件上限，从而区分 &lt;strong&gt;HDFS 层&lt;/strong&gt; 与 &lt;strong&gt;OS/磁盘层&lt;/strong&gt; 问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;四、注意事项与最佳实践&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;以 &lt;strong&gt;普通用户&lt;/strong&gt; 运行 Hadoop 服务与测试，避免 &lt;strong&gt;root&lt;/strong&gt; 带来的权限与环境风险；必要时通过 &lt;strong&gt;sudo -u &amp;lt;hadoop_user&amp;gt;&lt;/strong&gt; 启动脚本。&lt;/li&gt;
&lt;li&gt;测试前 &lt;strong&gt;备份重要数据&lt;/strong&gt;，选择 &lt;strong&gt;非高峰期&lt;/strong&gt; 执行，避免影响业务；每次只变更一个变量，便于归因。&lt;/li&gt;
&lt;li&gt;保持 &lt;strong&gt;多次重复测试取中位数&lt;/strong&gt;，并在相同负载下对比；压测期间同步采集 &lt;strong&gt;nmon&lt;/strong&gt; 与 &lt;strong&gt;作业日志&lt;/strong&gt;，便于回溯分析。&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 22 Jan 2026 12:13:04 +0800</pubDate></item><item><title>怎样设置Ubuntu FTP服务器的磁盘配额</title><link>https://pptw.com/jishu/790001.html</link><description>&lt;p&gt;
                            &lt;/p&gt;&lt;p&gt;在Ubuntu上设置FTP服务器的磁盘配额可以帮助你控制用户对文件系统的使用，防止某个用户占用过多的磁盘空间。以下是设置磁盘配额的步骤：&lt;/p&gt;
&lt;h3&gt;1. 安装必要的软件包&lt;/h3&gt;
&lt;p&gt;首先，你需要安装&lt;code&gt;quota&lt;/code&gt;软件包，它提供了磁盘配额的功能。&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install quota
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 编辑文件系统配置&lt;/h3&gt;
&lt;p&gt;编辑&lt;code&gt;/etc/fstab&lt;/code&gt;文件，为需要设置配额的文件系统添加&lt;code&gt;usrquota&lt;/code&gt;和&lt;code&gt;grpquota&lt;/code&gt;选项。&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo nano /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到你需要设置配额的文件系统条目，例如：&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;/dev/sda1 / ext4 defaults 0 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改为：&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;/dev/sda1 / ext4 defaults,usrquota,grpquota 0 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存并退出编辑器。&lt;/p&gt;
&lt;h3&gt;3. 重新挂载文件系统&lt;/h3&gt;
&lt;p&gt;重新挂载文件系统以应用新的配置。&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo mount -o remount /
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4. 启用配额&lt;/h3&gt;
&lt;p&gt;启用用户和组的配额。&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo quotacheck -cum /
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-c&lt;/code&gt;：创建配额文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-u&lt;/code&gt;：为用户启用配额&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m&lt;/code&gt;：为组启用配额&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. 启动配额服务&lt;/h3&gt;
&lt;p&gt;启动配额服务并设置为开机自启。&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo quotaon -ug /
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6. 配置FTP服务器&lt;/h3&gt;
&lt;p&gt;确保你的FTP服务器（如vsftpd）允许配额管理。编辑vsftpd配置文件：&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo nano /etc/vsftpd.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;确保以下配置项存在并启用：&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;quota_enable=YES
quota_file=/var/spool/vsftpd/quota.user
quota_group_enable=YES
quota_group_file=/var/spool/vsftpd/quota.group
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存并退出编辑器。&lt;/p&gt;
&lt;h3&gt;7. 重启FTP服务器&lt;/h3&gt;
&lt;p&gt;重启vsftpd服务以应用配置更改。&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo systemctl restart vsftpd
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8. 设置用户配额&lt;/h3&gt;
&lt;p&gt;你可以使用&lt;code&gt;edquota&lt;/code&gt;命令为用户设置配额。&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;sudo edquota -u username
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这将打开一个文本编辑器，你可以在这里设置用户的软限制和硬限制。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;Disk quotas for user username (uid 1000):
  Filesystem           blocks       soft       hard     inodes     soft     hard
  /dev/sda1             10485760   5242880    6553600        1000      500      1000
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;blocks&lt;/code&gt;：磁盘块数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;soft&lt;/code&gt;：软限制&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hard&lt;/code&gt;：硬限制&lt;/li&gt;
&lt;li&gt;&lt;code&gt;inodes&lt;/code&gt;：inode数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;保存并退出编辑器。&lt;/p&gt;
&lt;h3&gt;9. 验证配额设置&lt;/h3&gt;
&lt;p&gt;你可以使用&lt;code&gt;quota&lt;/code&gt;命令查看用户的配额使用情况。&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;quota -u username
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这将显示用户的当前磁盘使用情况和配额限制。&lt;/p&gt;
&lt;p&gt;通过以上步骤，你就可以在Ubuntu上成功设置FTP服务器的磁盘配额了。&lt;/p&gt;</description><pubDate>Thu, 22 Jan 2026 12:12:12 +0800</pubDate></item><item><title>Golang日志中异常信息怎么捕获</title><link>https://pptw.com/jishu/790000.html</link><description>&lt;p&gt;
                            &lt;/p&gt;&lt;p&gt;在Golang中，可以使用&lt;code&gt;log&lt;/code&gt;包来记录日志。要捕获异常信息，可以使用&lt;code&gt;recover&lt;/code&gt;函数来捕获panic，并将其记录到日志中。以下是一个简单的示例：&lt;/p&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; main

&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; (
	&lt;span class=&quot;hljs-string&quot;&gt;&quot;log&quot;&lt;/span&gt;
	&lt;span class=&quot;hljs-string&quot;&gt;&quot;os&quot;&lt;/span&gt;
)

&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;()&lt;/span&gt;&lt;/span&gt; {
	&lt;span class=&quot;hljs-keyword&quot;&gt;defer&lt;/span&gt; &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;()&lt;/span&gt;&lt;/span&gt; {
		&lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; r := &lt;span class=&quot;hljs-built_in&quot;&gt;recover&lt;/span&gt;(); r != &lt;span class=&quot;hljs-literal&quot;&gt;nil&lt;/span&gt; {
			log.Printf(&lt;span class=&quot;hljs-string&quot;&gt;&quot;捕获到异常: %v&quot;&lt;/span&gt;, r)
			&lt;span class=&quot;hljs-comment&quot;&gt;// 可以选择将日志输出到文件或其他地方&lt;/span&gt;
			&lt;span class=&quot;hljs-comment&quot;&gt;// log.SetOutput(os.Stdout) // 设置日志输出到标准输出&lt;/span&gt;
		}
	}()

	&lt;span class=&quot;hljs-comment&quot;&gt;// 这里是一些可能引发异常的代码&lt;/span&gt;
	&lt;span class=&quot;hljs-built_in&quot;&gt;panic&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;发生了一个错误&quot;&lt;/span&gt;)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在这个示例中，我们使用&lt;code&gt;defer&lt;/code&gt;关键字定义了一个匿名函数，该函数会在&lt;code&gt;main&lt;/code&gt;函数执行完毕后被调用。在这个匿名函数中，我们使用&lt;code&gt;recover&lt;/code&gt;函数来捕获可能发生的panic。如果捕获到异常，我们将其记录到日志中。&lt;/p&gt;
&lt;p&gt;需要注意的是，&lt;code&gt;recover&lt;/code&gt;函数只能在&lt;code&gt;defer&lt;/code&gt;语句中使用，因为它需要在panic发生后才能捕获到异常。此外，&lt;code&gt;recover&lt;/code&gt;函数只能捕获当前goroutine中的panic，无法捕获其他goroutine中的异常。如果需要捕获其他goroutine中的异常，可以使用channel或者其他同步机制来实现。&lt;/p&gt;</description><pubDate>Thu, 22 Jan 2026 12:11:04 +0800</pubDate></item><item><title>Golang日志与错误处理机制关系探讨</title><link>https://pptw.com/jishu/789999.html</link><description>&lt;p&gt;
                            &lt;/p&gt;&lt;p&gt;在Go语言（Golang）中，日志和错误处理是两个紧密相关但又有所区别的概念。它们之间的关系主要体现在以下几个方面：&lt;/p&gt;
&lt;h3&gt;1. 错误处理&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定义&lt;/strong&gt;：错误处理是指在程序运行过程中检测、报告和处理错误的过程。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实现方式&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;使用&lt;code&gt;error&lt;/code&gt;类型来表示错误。&lt;/li&gt;
&lt;li&gt;函数返回值中包含一个&lt;code&gt;error&lt;/code&gt;类型的返回值，调用者可以通过检查这个返回值来判断是否发生了错误。&lt;/li&gt;
&lt;li&gt;使用&lt;code&gt;panic&lt;/code&gt;和&lt;code&gt;recover&lt;/code&gt;机制来处理不可恢复的错误。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;divide&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(a, b &lt;span class=&quot;hljs-type&quot;&gt;float64&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;float64&lt;/span&gt;, &lt;span class=&quot;hljs-type&quot;&gt;error&lt;/span&gt;) {
    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; b == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt; {
        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;, errors.New(&lt;span class=&quot;hljs-string&quot;&gt;&quot;division by zero&quot;&lt;/span&gt;)
    }
    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; a / b, &lt;span class=&quot;hljs-literal&quot;&gt;nil&lt;/span&gt;
}

&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;()&lt;/span&gt;&lt;/span&gt; {
    result, err := divide(&lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;)
    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; err != &lt;span class=&quot;hljs-literal&quot;&gt;nil&lt;/span&gt; {
        log.Fatalf(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Error: %v&quot;&lt;/span&gt;, err)
    }
    fmt.Println(result)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 日志记录&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定义&lt;/strong&gt;：日志记录是指将程序运行时的重要信息记录下来的过程，以便于后续的调试和分析。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实现方式&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;使用标准库&lt;code&gt;log&lt;/code&gt;包来记录日志。&lt;/li&gt;
&lt;li&gt;可以自定义日志格式和输出目标（如文件、控制台等）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; (
    &lt;span class=&quot;hljs-string&quot;&gt;&quot;log&quot;&lt;/span&gt;
    &lt;span class=&quot;hljs-string&quot;&gt;&quot;os&quot;&lt;/span&gt;
)

&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;()&lt;/span&gt;&lt;/span&gt; {
    log.SetOutput(os.Stdout)
    log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
}

&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;()&lt;/span&gt;&lt;/span&gt; {
    log.Println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Starting the application...&quot;&lt;/span&gt;)
    &lt;span class=&quot;hljs-comment&quot;&gt;// ...&lt;/span&gt;
    log.Println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Application finished.&quot;&lt;/span&gt;)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. 日志与错误处理的关系&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;相互补充&lt;/strong&gt;：日志记录可以帮助开发者更好地理解程序的运行状态和错误发生的原因，而错误处理则确保程序在遇到错误时能够正确地响应和处理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;结合使用&lt;/strong&gt;：在实际开发中，通常会在错误处理的同时记录日志，以便于后续的问题排查和分析。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;hljs&quot;&gt;&lt;code&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;divide&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(a, b &lt;span class=&quot;hljs-type&quot;&gt;float64&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;float64&lt;/span&gt;, &lt;span class=&quot;hljs-type&quot;&gt;error&lt;/span&gt;) {
    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; b == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt; {
        err := errors.New(&lt;span class=&quot;hljs-string&quot;&gt;&quot;division by zero&quot;&lt;/span&gt;)
        log.Printf(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Error: %v&quot;&lt;/span&gt;, err)
        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;, err
    }
    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; a / b, &lt;span class=&quot;hljs-literal&quot;&gt;nil&lt;/span&gt;
}

&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;()&lt;/span&gt;&lt;/span&gt; {
    result, err := divide(&lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;)
    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; err != &lt;span class=&quot;hljs-literal&quot;&gt;nil&lt;/span&gt; {
        log.Fatalf(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Error: %v&quot;&lt;/span&gt;, err)
    }
    fmt.Println(result)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4. 最佳实践&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;一致性&lt;/strong&gt;：在整个项目中保持一致的错误处理和日志记录风格。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;详细程度&lt;/strong&gt;：根据需要调整日志的详细程度，避免过多的冗余信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能考虑&lt;/strong&gt;：在生产环境中，要注意日志记录对性能的影响，避免过度记录导致性能瓶颈。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过合理地结合使用日志记录和错误处理机制，可以提高程序的健壮性和可维护性。&lt;/p&gt;</description><pubDate>Thu, 22 Jan 2026 12:10:04 +0800</pubDate></item><item><title>Golang日志中性能瓶颈怎么识别</title><link>https://pptw.com/jishu/789998.html</link><description>&lt;p&gt;
                            &lt;/p&gt;&lt;p&gt;在Golang中，识别日志中的性能瓶颈通常涉及以下几个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;日志级别设置&lt;/strong&gt;：确保你的应用程序使用了适当的日志级别。例如，在开发环境中使用&lt;code&gt;DEBUG&lt;/code&gt;或&lt;code&gt;TRACE&lt;/code&gt;级别，在生产环境中使用&lt;code&gt;INFO&lt;/code&gt;、&lt;code&gt;WARN&lt;/code&gt;或&lt;code&gt;ERROR&lt;/code&gt;级别。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;日志内容&lt;/strong&gt;：在日志中包含足够的信息来帮助你理解发生了什么。这可能包括时间戳、请求ID、用户ID、操作类型、资源名称、关键变量值等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;性能分析工具&lt;/strong&gt;：使用Go的性能分析工具，如pprof，来分析程序的CPU和内存使用情况。这些工具可以帮助你找到消耗最多资源的函数或代码段。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;日志聚合和分析&lt;/strong&gt;：使用日志聚合工具（如ELK Stack、Datadog、Prometheus等）来收集、搜索和分析日志数据。这些工具可以帮助你快速定位问题。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;慢查询日志&lt;/strong&gt;：如果你的应用程序与数据库交互，启用数据库的慢查询日志可以帮助你发现执行缓慢的SQL语句。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;网络分析&lt;/strong&gt;：使用网络分析工具（如Wireshark）来监控网络流量，这有助于发现网络延迟或带宽瓶颈。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;代码审查&lt;/strong&gt;：定期进行代码审查，以识别可能导致性能问题的代码模式，如不必要的全局锁、低效的数据结构、过多的内存分配等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;基准测试&lt;/strong&gt;：编写基准测试来模拟高负载情况下的应用程序行为，这有助于你在开发阶段就发现潜在的性能问题。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;监控和告警&lt;/strong&gt;：设置监控和告警系统，以便在性能指标超过预设阈值时及时得到通知。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;分析日志模式&lt;/strong&gt;：通过分析日志中的模式，比如请求处理时间的分布，可以发现潜在的性能瓶颈。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;使用trace包&lt;/strong&gt;：Go的&lt;code&gt;runtime/trace&lt;/code&gt;包可以帮助你收集和分析程序的执行跟踪信息，这对于理解程序的运行流程和识别瓶颈非常有用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;优化和迭代&lt;/strong&gt;：根据分析结果进行优化，并持续监控优化效果。性能优化是一个迭代过程，可能需要多次调整和测试。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;通过上述步骤，你可以逐步缩小问题范围，最终定位到具体的性能瓶颈，并采取相应的措施进行优化。记住，性能优化是一个持续的过程，需要不断地监控、分析和调整。&lt;/p&gt;</description><pubDate>Thu, 22 Jan 2026 12:09:04 +0800</pubDate></item></channel></rss>