IT技术博客大学习 共学习 共进步
首页 / 忘我的追寻
IT 2013-09-23 23:11:31 / 累计浏览 5,060

让进程在后台可靠运行的几种方法

这篇讲的是如何在 SSH 断开或终端关闭后,让进程继续可靠运行的经典方法。文章从一个常见痛点出发:在远程执行耗时任务时,网络波动或误关终端会导致任务中断。作者围绕如何规避 HUP(挂断)信号,对比了多种解决方案。 核心方法包括:最常用的 `nohup`,让进程忽略 HUP 信号;使用 `setsid` 或 `(cmd &)` subshell 技巧,让进程在新会话中运行,从而脱离原终端。文章特别指出了一个关键差异:`nohup` 启动的进程父进程仍是原终端,而 `setsid` 启动的进程父进程会变为 init(PID=1),从根源上隔绝了信号影响。 对于已经提交的任务,文章也介绍了补救措施:通过 `Ctrl-Z` 挂起、`bg` 后台运行,最后用 `disown` 命令将其移出作业表,使其不再受 HUP 信号影响。这些方法各有简单的操作示例,非常适合临时任务或未预先规划的场景。 总的来说,文章系统梳理了从预防到补救的完整工具链,帮助你在不同情境下灵活选择,确保关键进程不会意外中断。

IT 2013-09-23 23:10:39 / 累计浏览 2,420

DRBD远程实时双机热备系统配置完全手册

这篇文章详细记录了作者重新搭建并配置DRBD远程实时双机热备系统的全过程。出发点很简单:几年前配过的环境已无法使用,于是决定完整走一遍流程,并将每一步骤记录分享。 内容以两台虚拟机为基础环境,从安装Linux系统、配置网络,到添加虚拟硬盘并分区作为镜像源,再到DRBD软件的安装与关键的配置文件(drbd.conf)编写,形成了一个清晰的操作链条。作者不仅给出了具体命令和系统输出,还穿插了如提前创建虚拟机快照等实用经验提示。 整个过程不空谈原理,而是通过一个实际可复现的案例,展示了如何构建一个数据实时同步的节点对。对于想了解或动手实践DRBD部署的读者,这篇手册提供了一个从零开始、步骤完整的配置蓝图,能够帮助读者快速建立对DRBD基础部署流程的认知。

IT 2013-09-23 23:09:27 / 累计浏览 5,520

Netty和Jetty的Java NIO 网络框架模型分析

这篇深度对比了 Netty 与 Jetty 这两个流行 Java 网络框架的底层 NIO 模型。作者从两者处理新连接请求的入口设计切入,揭示了它们截然不同的实现思路。 Netty 采用了专门的 Acceptor Reactor(由 Boss 线程负责),它只专注于监听和接收新的连接。一旦连接建立,便会根据连接序号对事件分离器(默认数量为 CPU 核心数的两倍)取模,将其分配给对应的 NioWorker 线程进行后续的读写监听。这种模型将“接收”与“处理”显式分离,但要求耗时操作必须异步提交,否则会阻塞整个事件循环。 相比之下,Jetty 的设计更接近经典的半同步/半异步模式。它在一个线程中通过同步的 `accept()` 方法阻塞等待新连接,就绪后生成变更事件注册到多路分离器,同样采用轮询策略分配负载。其代码结构往往被认为更直观。 作者最后提出了一个值得深思的问题:Netty 这种为“接收”单独设立线程池的方式,是否更利于处理短连接场景;而 Jetty 同步等待的传统模式,是否对长连接(如 HTTP)更友好?这背后的性能差异,还需要更精细的并发测试来验证。

IT 2013-09-23 23:08:03 / 累计浏览 2,440

大整数乘法

这篇讲的是大整数乘法的经典实现思路与代码实践。作者用一个整形链表来存储大整数的每一位,核心计算部分通过两层循环遍历乘数与被乘数,将每对数字的乘积累加到结果链表的对应位置上,并通过一个递归辅助函数处理进位。 实现的亮点在于对基本数据结构的运用:自定义的BigInt结构体包含了数值、指针和符号位,通过重载运算符(如乘法、输入输出流)让操作更直观。不过作者也坦诚地指出了代码的几处“非典型”设计:乘法运算返回指针而非对象,递归计算存在栈溢出风险,以及指针管理上不够严谨。这些反思本身也是很有价值的经验点。 从代码片段可以看到具体的实现细节,比如如何构建数字链表、处理进位和负号。整体上,这是一次从零开始构建大整数运算的扎实尝试,既展示了基本算法,也揭示了手动管理内存时需要面对的复杂性。

IT 2013-09-23 23:06:25 / 累计浏览 4,380

Jetty线程“互锁”导致数据传输性能降低问题分析

这篇讲的是在Jetty 7.2.1这个特定版本中,一个会导致数据传输性能降低的“互锁”问题。作者从Jetty经典的NIO异步反映器模型入手,分析了主线程(selector)与子线程(工作线程)之间的一种微妙配合失误。 问题的核心在于,当子线程遭遇网络拥塞、缓冲区写满时,它会进入阻塞状态并向主线程注册一个内部事件,等待拥塞解除的通知。然而,主线程的select循环在等待selector的网络事件时,可能并未及时轮询和处理这些内部事件,导致子线程无法被唤醒,形成“互锁”,拖累了整体性能。 文章通过拆解具体的代码逻辑,清晰地展示了这种线程间交互的瓶颈点。最终,作者指出了相应的解决或规避思路,比如合理设置超时参数,以帮助开发者在类似场景下优化配置,避免性能陷阱。

IT 2013-09-23 13:39:52 / 累计浏览 1,980

总结一下本站(忘我的追寻/WordPress)用到的插件、主题以及自己做的一些优化特性

这篇博客是作者对其WordPress站点运行一年来所做的优化和开发的总结。作者从自身需求出发,将默认英文主题进行了汉化和细致的视觉调整,形成了现在的界面风格。 在插件方面,文章详细介绍了SEO优化、百度统计与Google Analytics双备份、移动终端适配、反垃圾评论等核心插件的选择与配置经验,甚至提到了为评论区开发支持代码高亮功能的具体实践。其中,作者还分享了使用“简单算术题”插件并微调参数来对抗垃圾评论的巧思。 更值得关注的是作者自行开发的多个特性。例如,亲手制作了透明背景的favicon,并实现了返回顶部按钮。在分享功能上,作者不满足于现成方案,通过调用Google API自行生成文章二维码并保存至本地,同时利用短链接解决了微信扫描时的信任警告问题。此外,大量基于个人审美的CSS调优,以及为评论和归档页面增加的实用功能,都体现了对易用性和细节的深度打磨。 文章最后还列举了开发中使用的调试工具链和版本管理方案。从这些实践出发,为其他博主提供了一份实用的优化参考。