IT技术博客大学习 共学习 共进步

系统运维

共 606 篇文章

IT 2015-01-04 23:35:40 / 累计浏览 3,334

nginx中location的匹配和rewrite

这篇文章来自一位工程师的实战经历,他在调整线上 Nginx 规则时,遇到了一个关于 `location` 匹配的“诡异”问题:明明配置了精确的路径规则,流量却匹配不上。 问题的根因在于 Nginx 对待 URL 的两个阶段存在处理差异。用户直接请求的 URL 会先进行“归一化”处理(例如合并多余的斜杠),但在配置文件中使用 `rewrite` 指令跳转后生成的新 URL,却不会再经历这一过程。这种不一致,极易导致配置失误。 文章用一个具体例子清晰演示了这一点:当 `rewrite` 规则不小心多写了一个斜杠,形如 `/newapi//api`,直接访问 `/api`(归一化后)就无法命中 `/newapi/api` 这个 `location`;而直接请求未归一化的 `/newapi//api` 反而可以匹配上。 作者通过这个踩坑经历,揭示了 Nginx 转发机制中一个容易被忽略的细节。对于需要编写复杂规则的运维和后端同学来说,理解这个机制差异,能帮助避免一些难以排查的线上配置故障。

IT 2015-01-04 22:58:08 / 累计浏览 12,948

Linux 性能监控、测试、优化工具

系统性能专家 Brendan Gregg 在 LinuxCon NA 2014 大会上更新了他的经典演讲。这篇文章梳理了他演讲中关于 Linux 性能工具的核心图谱,最大的变化是新增了测试与优化两大部分,形成了一个完整的工具体系。 作者将复杂的性能问题拆解为三个清晰的场景:日常监控、基准测试与主动调优。针对每个场景,都提供了对应的工具图谱。例如,监控部分聚焦于观察系统运行状态,使用 perf、bpftrace 等工具追踪内核与用户层活动;测试部分则关注量化系统能力,展示了 fio、sysbench 等用于磁盘、网络和数据库的基准工具;优化部分提供了性能调优的视角,介绍了 perf stat、turbostat 等用于分析瓶颈并指导调整的工具。 整篇文章没有泛泛而谈,而是通过三张详尽的工具关系图,直观地展示了如何在不同阶段选择合适的工具。它帮助读者快速建立起 Linux 性能分析的全局观,知道在什么问题下该去哪里找对应的“武器”。

IT 2015-01-04 14:20:03 / 累计浏览 1,160

nginx反向代理做克隆采集小偷垃圾站,还能翻墙

这篇讲的是如何利用Nginx反向代理快速搭建一个网站内容镜像或代理站。作者从一个具体的配置文件入手,展示了核心步骤:通过`proxy_pass`将本地域名请求指向目标站点IP,并配合`proxy_set_header`伪装访问头,使对方服务器记录的是代理IP。文章特别强调了两个实用技巧:一是通过`subs_filter`规则(需安装第三方`nginx_substitutions_filter`模块)在返回页面前动态替换文本内容,可用于清理广告或修改版权信息;二是通过设置`Accept-Encoding`为空来禁用压缩,确保替换模块能正常工作。 作者还手把手演示了如何在已有NginX基础上,通过重新编译添加该模块的完整流程,从下载源码、查看原编译参数、执行`make`到平滑替换二进制文件,步骤清晰。整个方案相当于用NginX作为“中间人”,低成本实现了内容抓取、过滤与转发,对于需要快速搭建本地化内容镜像或进行页面预处理的开发者来说,是一套直接可用的技术脚本。

IT 2014-12-29 00:07:57 / 累计浏览 11,188

server日志的路径分析

这篇讲的是如何通过分析Web服务器日志中的路径信息,理解用户访问行为。作者从日常遇到的疑问出发——有人误以为服务器日志来自数据库,借此清晰界定了服务器日志的本质:它是客户端与服务器间所有通信(包括IP、时间、访问路径、状态等)的忠实记录。 文章以Nginx日志为例,逐条拆解了其看似杂乱的格式,对应到日志字段如请求URL、状态码等。核心在于,作者分享了利用Shell命令(awk和sed)从海量日志中提取、清洗并统计访问路径的实战过程。具体来说,通过awk按分隔符切割出URL字段,再结合sort和uniq进行排序计数,最终形成每个路径的访问次数统计。整个分析链条从原始日志文件到生成结构化的路径统计表,步骤清晰。 为了让结果更直观,作者还将统计输出为表格和图表形式,并强调了数据可视化在提升分析体验和洞察效果上的关键作用。整个分享聚焦于“如何做”,是一次从原始数据到可视化结论的完整实践演示。

IT 2014-12-28 23:51:45 / 累计浏览 3,070

vsftp安装以及本地用户和虚拟用户认证方式配置

这篇讲的是如何搞定VSFTP这个配置起来让人头疼的服务,作者从源码安装开始,一路记录了在本地用户和虚拟用户两种认证模式下的配置要点,并特别总结了几个容易踩到的“坑”。 文章从64位系统编译时库路径错误这个常见问题切入,给出了直接修改脚本的解决方案。在本地用户配置部分,重点解释了新版VSFTP中chroot目录权限冲突的问题,以及如何通过`allow_writeable_chroot=YES`参数巧妙解决。虚拟用户认证则详细介绍了从创建用户列表、生成加密数据库文件到配置PAM模块的全流程。 最实用的是作者分享的排查经验:当遇到认证失败并提示数据库文件无效时,通过对比正常机器生成的db文件,定位到了db4-utils安装或文件格式问题。这些从实际部署中总结出来的细节,对避免重复踩坑很有帮助。

IT 2014-12-28 23:46:32 / 累计浏览 2,594

Linux使用curl访问https站点时报错汇总

这篇整理了在使用Linux的curl命令行工具访问HTTPS站点时,几类最常见的证书相关报错及其解决方法。文章指出,问题的根源往往在于不同客户端(如curl、浏览器、Java程序)使用独立的证书库,而Linux的curl默认依赖位于 `/etc/pki/tls/certs/ca-bundle.crt` 的文件。 摘要列举了四种典型情况:遇到“Peer’s Certificate issuer is not recognized”时,多是由于自签名证书未被信任,解决方法是将私有CA的公钥追加到系统证书库中。而“certificate verify failed”错误,则常因本地CA证书库过旧,无法识别新签发的证书,需要下载最新的cacert.pem进行替换或使用系统命令更新。当遇到“unknown message digest algorithm”时,根源在于系统的OpenSSL版本过低,不支持如SHA-256等新算法,升级OpenSSL是必要步骤。 文章最后还对比了Java和PHP处理HTTPS的机制,指出它们拥有自己的证书库(如Java的cacerts),与系统curl的证书库相互独立。整篇文章以实战报错为线索,提供了直接的操作路径,对于解决这类环境配置问题很有参考价值。

IT 2014-12-08 23:23:54 / 累计浏览 3,592

使用valgrind的callgrind工具进行多线程性能分析

性能分析常让人头疼,尤其在多线程程序里找出瓶颈更不容易。这篇讲的是如何用开源的Valgrind套件中的Callgrind工具,来完成多线程程序的性能剖析。作者从实际命令出发,演示了从数据采集到图形化分析的完整流程。 核心步骤很清晰:先用`valgrind --tool=callgrind`运行目标程序生成分析文件。如果是多线程程序,加上`--separate-threads=yes`参数,就能为每个线程单独生成一份数据,比如`callgrind.out.31113-01`、`-02`等,便于逐个排查。采集到的数据再通过`gprof2dot.py`脚本转换成dot格式,最后用`dot`命令生成PNG调用图。 最终得到的图形能直观展示函数的调用关系和耗时分布,让性能热点一目了然。文章没有空谈理论,而是给出了可直接复制的命令和参数,对需要快速定位代码性能问题的开发者来说,是个实用且上手快的方案。

IT 2014-12-06 20:32:08 / 累计浏览 2,110

关于时间、时区、系统时间和硬件时间

这篇讲的是时间体系中那些容易被混淆的基础概念,以及如何在Linux系统里看清它们的“真面目”。作者从格林威治标准时间(GMT)和世界协调时间(UTC)的历史渊源与精度差异入手,厘清了二者常被混用的原因。同时,也解释了夏日节约时间(DST)的由来,以及系统时间和硬件时间(BIOS时间)这两个在计算机中至关重要的区别:一个由操作系统管理和调用,另一个则依赖主板电池维系,是系统启动时的时间基准。 文章的一大实用亮点在于,它不仅解释概念,更手把手地展示了在Linux终端中查看这些时间的正确姿势。例如,用`date -u`获取UTC时间,而不仅仅是显示本地时间的`date`命令。特别提到了输出中的“CST”可能代表四种不同的时区(包括中国标准时间),这恰恰是很多技术人员会踩的一个小坑。最后,通过`hwclock`命令查看硬件时间,并提供了一个去除其输出中模糊“CST”标识的小技巧。 总的来说,这篇文章从原理到实操,清晰地梳理了时间管理中几个关键但又容易忽略的点,尤其适合那些需要在多时区环境或系统底层开发中与时间打交道的工程师。

IT 2014-12-06 20:30:27 / 累计浏览 4,313

Windows、RedHat、CentOS和Ubuntu操作系统生命周期

这篇从常被忽略但至关重要的“操作系统生命周期”视角出发,对比了Windows、RedHat、CentOS和Ubuntu四大主流系统的支持周期差异。 文章直接列出了具体数据:Windows XP曾拥有长达12年的生命周期,而后续版本的寿命标注为“X”,暗示其策略可能发生变化;RedHat Enterprise Linux(RHEL)则以稳定的7年周期作为企业级支持的标杆;Ubuntu方面,标准版仅提供9到18个月的短暂支持,但其LTS(长期支持)版本将支持期延长至5年,早期版本如8.04 LTS则为3年。 作者通过这些时间线清晰地揭示了核心差异:RedHat以最长的稳定周期服务于需要可预测性和长期维护的企业环境;Ubuntu的LTS版本在社区活跃度与长期支持之间取得了平衡;而Windows的生命周期策略则显得更为多变。对于运维人员和IT决策者而言,理解这些周期是进行系统规划、保障安全更新以及管理技术债务的关键依据。

IT 2014-12-03 23:49:16 / 累计浏览 1,293

LINUX VPS主机之间快速复制备份搬家

很多站长和开发者都遇到过这样的场景:买了新VPS,或者需要为旧站点创建备份,怎么高效地把网站数据从一台Linux服务器“搬”到另一台?这篇文章就专门解决这个痛点,给出了几种在VPS之间快速迁移目录的实战方案。 文章重点剖析了两种主流方法。第一种是“边打包边传输边解压”的流式处理,一条`tar | ssh | tar`命令就能完成,无需在源服务器生成中间压缩包,适合追求极致效率的运维场景。第二种是更直观的`scp -r`命令,它支持目录递归复制并能看到传输进度,对新手更为友好。作者还补充了用SCP远程解压、以及用WGET传输的变体思路。 文章的核心价值在于,它没有停留在命令罗列,而是指出了关键差异:两者耗时相近,但体验不同。tar管道方式隐蔽高效但无进度反馈,SCP则过程透明。读者可以根据自己对操作可视化和脚本化的需求来灵活选择,为服务器数据迁移提供了实用的运维工具箱。

IT 2014-12-03 00:02:03 / 累计浏览 2,213

/var/spool/clientmqueue目录文件清理

这篇讲的是服务器磁盘空间告急时,如何清理那个让管理员头疼的 /var/spool/clientmqueue 目录。 作者从一次服务器/var分区占用率飙升至90%的排查经历说起,定位到罪魁祸首正是clientmqueue这个邮件队列目录。文章的痛点很明确:当文件多到一定程度时,常规的 `rm` 命令会因“Argument list too long”错误而失灵。 解决方法很巧妙,利用了管道的力量。文章给出了两种场景的清理命令:有权限时用 `ls | xargs rm -f`,需sudo时则用 `find ... | xargs rm -f`。不过,真正的价值不止于清理。作者还深入解释了根因:这些“垃圾文件”其实是cron任务的标准输出,在sendmail未启动的情况下被默认保存为了邮件。最治本的方案是在crontab任务中直接添加输出重定向,从源头杜绝此类问题。 整个过程从发现问题、遭遇报错,到找到方法并深挖原理,是一套完整的技术踩坑与排障指南。

IT 2014-12-02 23:34:15 / 累计浏览 3,407

Linux 安装 Nginx PHP fpm

这篇教程针对初学者在Linux下搭建Nginx+PHP环境时常遇到的依赖复杂、步骤陈旧的困扰,提供了一条从零开始、清晰简洁的实操路径。作者从建议使用Ubuntu Server系统出发,完整演示了从源码编译安装Nginx和PHP的全过程,核心步骤都配有明确的命令行代码。 文章不仅讲解了如何让Nginx和PHP-CGI协同工作的基础配置,更关键的是,它指出了临时运行与生产环境的区别,并详细说明了如何通过PHP-FPM配置守护进程,实现更稳定可靠的部署。此外,教程还涉及了单独编译安装PHP扩展模块(如sockets)这一实用技巧,使读者无需重新编译整个PHP即可按需添加功能。 整体而言,这是一篇注重实战、步骤连贯的现代指南。它强调方法的简洁性与可用性,并承诺会保持内容更新,对于希望快速搭建起标准Web开发环境的新手来说,提供了扎实且可跟随的步骤。

IT 2014-12-02 00:03:23 / 累计浏览 1,834

mac安装svn

这篇文章分享了在 Mac 上安装和配置 Subversion 时典型的“踩坑”经历与最终的最优解。作者最初发现系统自带的 SVN 1.6 版本过低,于是手动升级到 1.8.8,却接连遇到了不支持 http 协议(需从 neon 切换到 serf 依赖)以及在 Zend Studio 中找不到 javahl 插件等问题。一番折腾后才发现,之前的手动升级操作其实多此一举。 文章最终推荐的“直路”方案,是利用 Homebrew 包管理器。通过几条关键命令——安装 Homebrew、更新、然后使用 `brew install --universal --java subversion`——就能一次性完成最新版 SVN 和 JavaHL 绑定的安装。随后,只需创建一个库文件的软链接,即可无缝集成到开发环境(如 Zend Studio)中。文中也附带了手动编译安装的完整步骤和常见报错的解决方法。 对于被 Mac 上 SVN 安装问题困扰的开发者来说,这篇文章提供了从错误路径到正确路径的完整对照。它清晰地指出,利用包管理工具自动化处理依赖和环境配置,是避免繁琐依赖调试(如 neon/serf、autoconf、xctoolchain)和版本冲突的高效途径。

IT 2014-12-01 23:51:11 / 累计浏览 2,830

EXT文件系统误删除数据恢复指南

这篇讲的是Linux运维中一个让人头疼的常见问题:使用EXT文件系统的服务器上误删了重要文件,该怎么办? 作者直入主题,没有冗长的背景铺垫,而是直接切入两种最关键的自救场景。第一种情况是“虚惊一场”——文件虽然被rm命令删除了,但只要某个进程(比如正在写日志的tail)还持有该文件的句柄,就有办法“复活”。文章详细演示了如何通过/proc这个伪文件系统,定位到进程的文件描述符,然后直接将数据拷贝出来。这里的诀窍在于理解Linux内核“延迟释放”的特性。 第二种情况则更为棘手:文件已被彻底删除,进程也已退出。此时,作者推荐了extundelete这个针对EXT3/EXT4的专用工具。文章像一份操作手册,从关键的第一步“umount分区以防数据被覆盖”,到安装、使用工具扫描并恢复被删目录,步骤清晰。特别强调了在进行任何恢复操作前,使用dd命令对整个磁盘分区做镜像备份的必要性,这是避免二次损坏的最后防线。 整篇文章的价值在于其极强的实操性。它没有空谈理论,而是用具体的命令行和输出结果,为处于慌乱中的技术人员指明了两条清晰、可行的恢复路径。对于管理Linux系统的工程师来说,这篇文章更像是一份值得收藏的应急手册。

IT 2014-12-01 23:41:09 / 累计浏览 2,309

小心,apc可能导致php-fpm罢工!

这篇讲的是一次线上502故障的深度排查。作者从php-fpm进程数异常飙升入手,通过`pstack`命令分析进程堆栈,发现几乎所有进程都卡在申请APC互斥锁上,指向了死锁。 根因的追查过程很有价值。通过GDB调试,他们定位到互斥锁被一个已不存在的进程(11274)持有。结合php-fpm日志,最终确认是该进程因`hsf`扩展的内存错误(SIGSEGV)而异常退出,退出时未能释放它持有的APC锁,从而导致了整个进程池的级联阻塞。 解决思路清晰:一是彻底的方案,即根据APC维护者建议迁移到不再有此风险的`opcache`;二是针对性修复,参考PHP官方bug报告修改APC源码,在进程异常退出时强制释放锁。文章完整展示了一个由扩展缺陷引发的内存级死锁案例及其分析路径。

IT 2014-11-30 23:22:09 / 累计浏览 7,475

存储基础知识之——硬盘接口简述

这篇文章梳理了从经典的IDE到现代FC、iSCSI等七种主要硬盘接口技术的演进与区别。文章指出,IDE(即并行ATA)因性能和速率的局限,已随SATA(串行ATA)的兴起而退役。SATA目前是消费级市场的主流选择,其接口速率已迭代至第三代。 在企业与高性能领域,文章则对比了SCSI体系及其继任者。SCSI-3虽能提供160MB/s带宽并支持多设备,但其并行架构已发展为串行的SAS接口,后者不仅提供更高的传输速率(如第二代SAS达6Gbps),还通过点对点连接简化了部署,并能兼容SATA设备。更为关键的是,文章详解了如何通过网络化突破本地存储的物理限制:iSCSI技术将SCSI命令封装于TCP/IP协议中,利用现有网络实现远距离、大规模的存储区域网络(SAN);而光纤通道(FC)则以其高速(可达16Gbps)、低延迟和长距离传输(最远10公里)的特性,成为构建高性能企业级SAN的核心选择。 整体来看,这篇文章从接口的物理形态、传输协议到应用场景,系统性地梳理了存储连接技术的关键差异,为理解存储系统架构和选型提供了清晰的脉络。

IT 2014-11-28 23:11:42 / 累计浏览 4,532

存储基础知识之——磁盘阵列原理及操作实战

这篇文章从磁盘阵列的物理结构讲起,重点拆解了Linux环境下逻辑卷管理(LVM)的核心概念与实操流程。作者先用通俗比喻厘清了LUN(逻辑单元号)在SCSI寻址体系中的扩展作用,随后将LVM的三个关键层次——物理卷(PV)、卷组(VG)、逻辑卷(LV)——逐一剖析。文章没有停留在理论定义,而是直接进入实战环节:从用fdisk修改分区格式为LVM专用的8e开始,依次演示了如何初始化PV、创建并激活VG、以及最终在VG上创建LV的完整命令链。其中还穿插了管理场景的处理,比如如何为现有VG扩容、安全移除PV等。对于需要灵活调配存储资源的运维或开发人员,这篇文章把从硬件到逻辑层的概念关联和操作路径理得比较清晰,尤其适合想理解LVM实际用途的读者。

IT 2014-11-28 23:06:17 / 累计浏览 4,448

使用nginx限制蜘蛛的频繁抓取

这篇讲的是作者如何应对百度蜘蛛异常抓取的问题。上周,百度蜘蛛对“玩客”网站的抓取频率突然飙升至原来的5倍,导致服务器负载急剧升高,影响了正常服务。问题的根源在于单一爬虫的请求量超出了服务器的承载能力。 为了解决这个问题,作者利用了nginx内置的ngx_http_limit_req_module模块,对百度蜘蛛的抓取频率实施了精准限制。核心配置是将百度蜘蛛的请求速率限制在每分钟200次,并设置了最大并发为5的队列缓冲。当短时间内请求量超过此限制时,系统会直接返回503状态码,快速拒绝多余的请求,从而有效保护了后端服务。 文章不仅给出了即用的配置代码,还解释了每个参数的作用,例如burst和nodelay参数如何协同工作。同时,作者点出了该模块背后的“漏桶算法”原理,并提供了源码阅读指引。对于遇到类似爬虫管理问题的运维或开发人员来说,这是一个非常实用且有细节参考的解决方案。

IT 2014-11-28 22:59:58 / 累计浏览 2,592

分布式对象存储系统Sheepdog性能测试

这篇文章对分布式对象存储系统 Sheepdog 进行了一次详尽的性能摸底,特别针对其声称的“零配置、线性扩展”特点,在真实硬件环境下考察了其 IOPS 和吞吐量表现。作者搭建了一个包含 6 个节点的集群,节点配备常见的 7200 转 SATA 硬盘,并创新地利用 SSD 作为对象缓存,虚拟机则运行于基于 KVM 的 QEMU 环境中。 测试聚焦于两个核心指标:使用 fio 工具测量的随机读写 IOPS,以及使用 iozone 测量的顺序读写吞吐量。文章首先澄清了存储介质的基准性能——普通 SATA 硬盘的 IOPS 理论上限仅约 65,而 SSD 则可轻松突破数万。在不启用对象缓存的只读测试中,Sheepdog 展现了其分布式优势:6 节点协同工作,使得虚拟机内的 IOPS 突破了单块 SATA 硬盘的极限,在单线程下达到 100 左右,多任务或异步 IO 场景下更可提升至 230-250。测试文件大小对 IOPS 有显著影响,缩小文件范围能进一步提升性能。 作者通过严谨的控制变量法,对比了启用/不启用 SSD 缓存、不同文件大小以及不同 IO 调度算法下的结果。最终的测试数据清晰地揭示了 Sheepdog 在不同配置下的性能天花板和瓶颈所在,为评估其是否适合特定业务负载(如虚拟机块存储)提供了直接的量化依据。

IT 2014-11-28 22:39:58 / 累计浏览 1,746

FastDFS使用经验分享

这篇讲的是FastDFS在实际使用中遇到的两个痛点,并给出了经过验证的解决方案。第一个问题是文件下载时显示的哈希文件名对用户不友好。作者从存储机制分析,指出FastDFS本身不保留原始文件名,核心解决方法是结合应用数据库与Nginx:上传时记录FID与原始文件名,下载时在URL中通过`attname`参数携带原始文件名,再利用Nginx配置拦截该参数,写入响应头的`Content-Disposition`字段,从而让浏览器展示正确的文件名。 第二个经验是管理图片的多分辨率备份。作者利用了FastDFS的“主从文件”机制,即主文件与从文件仅在ID上有关联(从文件ID包含主文件ID),服务端并不维护其关系。通过先上传源图,再以指定主文件ID和后缀名上传缩略图,即可建立关联。文章特别提醒,这种关联是逻辑上的,删除主文件时需要应用层自行处理从文件的清理,避免资源孤立。 两篇分享都聚焦于FastDFS默认功能与实际业务需求之间的 gap,并提供了简单有效的工程化实现路径。