6 小时前 / coredump
大纲 Buffered I/O Page Cache 预读 posix_fadvise 参考文档 想找时间复习和总结一下 Linux 的文件 I/O 方式。大概想了,主要内容可以分成 4 个部分: Buffered I/O:传统的基于 page cache 的文件读写。mmap:可以让应用像访问内存一样访问文件。Direct I/O 和 AIO:绕过 page cache 的 I/O 方式,同时支持异步文件 I/O。io_uring:Linux 5.1 才引进的全新异步 I/O 方式。本文是 Linux 文件 I/O 进化史系列的第一篇(后面的还没写,太久没发文章,先发出来充充数……)。
5 天前 / coredump
大纲进程的地址空间布局 从虚拟内存到物理内存 虚拟内存 页表的设计 缺页中断 TLB Hugepages THP Page Cache free 命令 drop caches 刷新脏页 Page Cache 相关工具 内存回收和内存交换 Swap 分区 内存水位标记 内存回收和 swappiness 总结 参考资料 进程的地址空间布局在 Linux 下,每个进程都拥有独立的虚拟地址空间。 在 IA-32 的场景下,虚拟地址只有 32 位,所以最大的寻址空间是 2^32 = 4GB。Linux 内核将这个 4GB 的地址空间按照 3:1 的比例划分,其中用户空间占用低地址的 3GB,内核空间占用高地址的 1GB。4GB 的地址空间,真的是捉襟见肘。
6 天前 / 小姐姐味道
原创:小姐姐味道(微信公众号 ID:xjjdog),欢迎分享,转载请保留出处。 有很多同学微信问我,Linux 命令这么多,该怎么从入门到精通?其实,这个事情非常的 simple,这篇文章将会带你飞。文章非常的长,要挑一个阳光明媚的 sunshine weekend,耐心去搞定。 本文将由一个 Linux 命令概览开始,说明 Linux 命令的方方面面。如果你读完这部分还是一头雾水,那么就证明需要按照下面的小白教程去学习了,内容涵盖了:如何挑选 Linux 发行版、如何安装 Linux 系统,按照主题学习 Linux 系统的命令等。
9 天前 / u179665
!点击上方蓝字"开发内功修炼",关注并设为星标 飞哥的硬核文章将第一时间送达~~~ 如果你的项目中支持高并发,或者是测试过比较多的并发连接。那么相信你一定遇到过“Too many open files”这个错误。 这个错误的出现其实是正常的,因为每打开一个文件(包括 socket),都需要消耗一定的内存资源。为了避免个别进程不受控制地打开了过多的文件而让整个服务器崩溃,Linux 对打开的文件描述符数量有限制。 但是解决这个错误“奇葩”的地方在于,竟然需要修改三个参数:fs.nr_open、nofile(其实 nofile 还分 soft 和 hard) 和 fs.file-max。
31 天前 / 博文视点Broadview
了解更多 BPF 技术内幕,推荐阅读《BPF 之巅:洞悉 Linux 系统和应用性能》一书。▼BPF 是近年来 Linux 系统技术领域一个巨大的创新。作为 Linux 内核的一个关键发展节点,其重要程度不亚于虚拟化、容器、SDN 等技术。▼BPF 的工作方式十分有趣 : 最终用户使用 BPF 虚拟机的指令集(也称 BPF 字节码)定义过滤器表达式,然后传递给内核,由解释器执行。这使得包过滤可以在内核中直接进行,避免了向用户态进程复制每个数据包,从而提升了数据包过滤的性能,tcpdump(8) 就是这样工作的。
32 天前 / lxneng
通常来看,Redis 开发和运维人员更加关注的是 Redis 本身的一些配置优化,例如 AOF 和 RDB 的配置优化、数据结构的配置优化等,但是对于操作系统是否需要针对 Redis 做一些配置优化不甚了解或者不太关心,然而事实证明一个良好的系统操作配置能够为 Redis 服务良好运行保驾护航。 众所周知 Redis 的作者对于 Windows 操作系统并不感冒,目前大部分公司都会将 Web 服务器、数据库服务器等部署在 Linux 操作系统上,Redis 也不例外。所以接下来介绍 Linux 操作系统如何优化 Redis,包含如下七个方面。 一。
36 天前 / flyer0126
我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。 在工作中经常有同学在讨论,到底什么是好代码?对于好代码,相信每个人都有自己的理解,可能它是包括以下几个维度:关于代码结构本身; 关于功能实现; 关于学习成本; 关于程序可读性。.. 但是全面清晰的将所有标准都一一列举出来又是非常困难。记得某一期的 TED 邀请了 Linus,里面讲到了他个人对生活的品味,以及为啥有 Linux 等等。其中 Linus 提到了对 “好代码”的一些看法,一起整理分享给大家。
41 天前 / itfanr
上周在一次偶然的谈话中,我无意中听到一位同事说:Linux 的网络堆栈太慢了!你不能指望它在每个核每秒处理超过 5 万个数据包! 这引起了我的思考。虽然我同意每个核 50kpps 可能是任何实际应用程序的极限,但 Linux 网络栈能做什么呢?让我们换个说法,让它更有趣: 在 Linux 上,写一个每秒接收 100 万个 UDP 数据包的程序有多难? 希望,回答这个问题对于现代网络堆栈设计有一个很好的启发。 首先,让我们假设: 测量每秒包数 (pps)要比测量每秒字节数 (Bps)有趣得多。您可以通过更好的流水线和发送更长的数据包来实现更高的 Bps。
70 天前 / xF0rk
概述当黑客获取系统 root 权限时,为了实现持久化控制往往会创建隐藏恶意进程,这给应急响应人员取证的时候带来了难度,隐藏进程的方法分为两类,一类是用户态隐藏,另一类是内核态隐藏。用户态常使用的方法有很多,例如劫持预加载动态链接库,一般通过设置环境变量 LD_PRELOAD 或者 /etc/ld.so.preload,过滤 /proc/pid 目录、修改进程 PID 等等。内核态隐藏进程一般是加载恶意的内核模块实现进程隐藏,本文抛砖引玉,介绍应急响应场景中遇到过的 Linux 操作系统进程隐藏的手段以及检测方法。
74 天前 / u179665
困惑很多人的并发问题在网络开发中,我发现有很多同学对一个基础问题始终是没有彻底搞明白。那就是一台服务器最大究竟能支持多少个网络连接?我想我有必要单独发一篇文章来好好说一下这个问题。 很多同学看到这个问题的第一反应是 65535。原因是:“听说端口号最多有 65535 个,那长连接就最多保持 65535 个了”。是这样的吗?还有的人说:“应该受 TCP 连接里四元组的空间大小限制,算起来是 200 多万亿个!” 如果你对这个问题也是理解的不够彻底,那么今天讲个故事讲给你听! 一次关于服务器端并发的聊天 "TCP 连接四元组是源 IP 地址、源端口、目的 IP...
93 天前 / 果冻虾仁
点击上方“蓝字”关注我们 面试官:老鸟 一个大文件,包含 5 亿个整数,求中位数 应聘者:小鹅 这题不难啊。 排序,找出中间行的数字即可 面试官:老鸟 请审题,是一个大文件。不能装进内存里 应聘者:小鹅 5 亿个 int 也就 2GB,什么机器内存这么小? 面试官:老鸟 是 2G 么?你怎么算的这么快? 应聘者:小鹅 很简单,面试的时候,快速口算内存占用有技巧。我先问一句,你学过英语吗? 面试官:老鸟 废话,当然学过 应聘者:小鹅 和中文数字习惯不同。英文数字在朗读和表示的时候是三位一组的。
99 天前 / coredump
本文主要适用于 x86-64 体系结构下的 Linux C/C++ 服务器程序。 程序运行的时候,我们经常需要测量某一段代码的执行时间。最简单的做法,自然就是在代码开始的地方获取当前时间 begin_time,在代码结束的地方获取当前时间 end_time,然后计算 end_time - begin_time 即可。 测量代码执行时间的时候需要考虑以下几个问题: 代价 - 这可能是一个高频操作,获取时间的代价不能太高。精度 - 至少是微秒级别。稳定 - 如果使用的时钟抖动误差很大,那测量结果往往是不可靠的。gettimeofdaygettimeofday(2)[1] 这个函数可以获得微秒级别的时间戳。