yoko blog

learn and live


  • 首页

  • lal文档

  • 关于我

  • 友链

  • 站内搜索

[译] linux内存管理之RSS和VSZ的区别

发表于 2019-08-25 | 分类于 计算机系统
| 热度:
| 字数统计: 574

RSS是Resident Set Size(常驻内存大小)的缩写,用于表示进程使用了多少内存(RAM中的物理内存),RSS不包含已经被换出的内存。RSS包含了它所链接的动态库并且被加载到物理内存中的内存。RSS还包含栈内存和堆内存。

VSZ是Virtual Memory Size(虚拟内存大小)的缩写。它包含了进程所能访问的所有内存,包含了被换出的内存,被分配但是还没有被使用的内存,以及动态库中的内存。

假设进程A的二进制文件是500K,并且链接了一个2500K的动态库,堆和栈共使用了200K,其中100K在内存中(剩下的被换出或者不再被使用),一共加载了动态库中的1000K内容以及二进制文件中的400K内容至内存中,那么:

阅读全文 »

回收站 - rtmp协议中的chunk stream id, message stream id, transaction id, message type id

发表于 2019-08-15 | 分类于 回收站
| 热度:
| 字数统计: 50

本文移入开源流媒体项目lal的官方文档中: https://pengrl.com/lal

本文完,作者yoko,尊重劳动人民成果,转载请注明原文出处: https://pengrl.com/p/25610/

[译] 理解存储性能的两个指标每秒读写次数与时延

发表于 2019-08-14 | 分类于 计算机系统
| 热度:
| 字数统计: 949

大部分人在考虑存储性能时,他们首先想到的是最大吞吐量。但是最大吞吐量就像汽车厂商给汽车标的最高速度。实际上,你几乎永远不会达到那个速度。考虑存储性能时也不应该只考虑最大吞吐量。

还拿汽车来举例,大部分时候,加速度和过弯的处理能力可能会比最大吞吐量更重要。这和存储性能是类似的。

大部分人都知道SSD固态硬盘一般比普通的机械硬盘快。但这不仅仅是因为固态硬盘的最大吞吐量更大。还和它们的IOPS(Input/Output operations per second, 每秒读写次数)有关。更高IOPS的存储器,会提高我们日常真实应用的性能。但是IOPS也不是唯一指标。更准备的说:IOPS只有和平均时延以及读写字节大小相关联时才有意义。让我们先来看IOPS和时延。

阅读全文 »

使用supervisor工具对服务进程做保活管理

发表于 2019-08-13 | 分类于 环境搭建|工具使用
| 热度:
| 字数统计: 1.9k

使用supervisor工具对我们的非daemon程序做保活,当我们的进程崩溃了或被误杀了后能再次被自动拉起。

CentOS 安装 supervisor

阅读全文 »

[译] 写一个简单的内存分配器(替换glibc中的malloc函数)

发表于 2019-08-05 | 分类于 计算机系统
| 热度:
| 字数统计: 3.5k

本文介绍如何用c语言实现一个简单的内存分配器,可替换glibc中的 malloc(), calloc(), realloc(), free().

这是一篇入门级别的文章,所以不会介绍所有的细节。
代码实现主要为了演示内存分配器的基本工作原理,所以和工业级内存分配器相比,缺少非常多的性能优化,分配内存时也不会按页对齐,但是至少,我们构建的内存分配器是可以工作的。

在构建内存分配器之前,需要先介绍程序的内存布局。操作系统中的进程运行在它自己独有的虚拟地址空间,不同进程间的虚拟地址空间是独立、相互隔离的。虚拟地址空间一般由以下5部分组成:

阅读全文 »

CentOS7升级内核以开启TCP BBR拥塞控制算法

发表于 2019-07-31 | 分类于 环境搭建|工具使用
| 热度:
| 字数统计: 499

通过ELRepo RPM repo升级内核

查看当前内核版本

1
$uname -r

输出如下:

阅读全文 »

Go语言使用cgo时的内存管理笔记

发表于 2019-07-28 | 分类于 Go
| 热度:
| 字数统计: 2.1k

先放结论

使用cgo时:

  1. 和日常Go对象被gc管理释放的表现略有不同的是,Go和c代码的类型相互转化传递时,有时需要在调用结束后手动释放内存。
  2. 有时类型转换伴随着内存拷贝的开销。
  3. 如果想消除拷贝开销,可以通过unsafe.Pointer获取原始指针进行传递。
  4. c代码中的内存泄漏,依然可以使用valgrind检查。但是需要注意,像C.CString这种泄漏,valgrind无法给出泄漏的准确位置。
  5. go pprof无法检查c代码中的内存泄漏。

引子

阅读全文 »

[译] Go语言的有缓冲channel和无缓冲channel

发表于 2019-07-22 | 分类于 Go
| 热度:
| 字数统计: 1.5k

Go中的channel十分强大,理解channel的内部机制后再去使用它可以发挥出更大威力。另外,选择使用有缓冲channel还是无缓冲channel会影响到我们程序的行为表现,以及性能。

无缓冲channel

阅读全文 »

Go语言channel备忘录

发表于 2019-07-16 | 分类于 Go
| 热度:
| 字数统计: 1.3k

目录

  1. 无缓冲channel等价于缓冲大小为0的channel,而不是1
  2. 发送者和接收者哪些情况会阻塞
  3. close哪些情况会导致panic
  4. 如何优雅的关闭channel
  5. 当一个select中有多个channel满足可读时,谁被激活
  6. select with default
  7. 读取时获取第二个返回值,以此判断该channel是否被关闭
  8. close前写入的数据,接收者依然可以按顺序读取到
  9. 一个channel有多个接收者时,close channel会唤醒所有接收者
  10. 配合timer实现channel读取的超时机制
  11. 当channel只用做同步通知,不关心channel中传输的值时,可使用 chan struct{} 类型
  12. 单向channel类型的作用
  13. 可以make单向channel,但是这样做没有意义
  14. channel配合for range的简化写法
1. 无缓冲channel等价于缓冲大小为0的channel,而不是1
阅读全文 »

网络知识(1) - TCP连接关闭四次挥手

发表于 2019-07-14 | 分类于 网络编程
| 热度:
| 字数统计: 1.6k

TCP连接关闭时状态迁移图

本文包含内容:

  • TCP FIN 简介
  • TCP ACK 简介
  • 为什么 TCP 连接关闭是四次挥手
  • 先看最常见的正常关闭流程
  • 什么时候进入 CLOSING 状态
  • TIME_WAIT 状态的作用
  • 为什么被动关闭端不需要维持一个类似 TIME_WAIT 的状态,万一发出的 ACK 也丢失了呢
  • 最后,再奉上一张 geek 味十足的tcp状态迁移图

TCP FIN 简介

阅读全文 »
1…567…10
yoko

93 日志
10 分类
36 标签
RSS
GitHub

开源项目
🍀 lal: Go 直播服务器.
🍀 naza: Go 基础库.
🍀 libchef: c++ 基础库.
© 2019 — 2021 yoko 京ICP备19024469号
0%