如果你在 GitHub 上有自己的开源项目或是参与过开源项目,都会成为面试的加分项!
什么是Linux swap space呢?我们先来看看下面两段关于Linux swap space的英文介绍资料:
现在你可能还觉得node、zone、伙伴系统、slab这些东东还有那么一点点陌生。别怕,接下来我们结合动手观察,把它们逐个来展开细说。(下面的讨论都基于Linux 3.10.0版本)
有没有发现,github这个词越来越多出现在你的生活和工作中。程序员在讨论github,因为据说好的程序员都在用github。做机器学习的在讨论github,因为大家都把程序放在github上分享。写Python和机器学习教程的也在讨论github,因为他们要把内容放在github上。想做个人主页的人在讨论github,因为他们想知道怎么把自己的主页变得更加炫酷。那么是时候开始了解github了。
为了支持NUMA模型,也即CPU对不同内存单元的访问时间可能不同,此时系统的物理内存被划分为几个节点(node), 一个node对应一个内存簇bank,即每个内存簇被认为是一个节点
我们公司的基础架构部有个云Redis平台,其中Redis实例在申请的时候可以自由选择需要的内存的大小。然后就引发了我的一个思考,Redis单实例内存最大申请到多大比较合适?假设母机是64GB内存的物理机,如果不考虑CPU资源的的浪费,我是否可以开一个50G的Redis实例?
今日继续更新《Go语言轻松系列》第二章「内存与垃圾回收」第二部分「Go语言内存管理」。
7.既然有man-pages-zh-CN,安装看看。结果证明中文化后的帮助文档惨不忍睹,还是卸载算鸟。
博客对我来说,就像一个云端笔记,可以记录一下自己在完成各种任务中坑,也可以让别人看到从而避免这些,可以写博客的地方有很多比如csdn、博客园、简书之类的,但是看到许多大神都是用自己搭建的博客,仔细一了解才知道都是用hexo和github搭建的 看了许多教程之后,踩了许多坑之后就想总结一下自己的搭建过程
从上面的解释来看,就是定义了一个队列,并设置了队列长度,那么这个队列是做什么的,接着往下看
在 内存区域 的水位控制机制 中 , 在 内存区域 zone 结构体中的 watermark 成员 表示 " 页分配器 " 使用的 区域水线 ;
今天碰到一个设计的严重问题,由于使用了外部文件来和sqlplus交互 sql大体结构如下 select xxxxx from xxxxx where table_name in ( "解析外部文件“) 在测试环境中没有什么问题,当某个用户表比较多的时候,就开始报如下的错误 * ERROR at line 1003: ORA-01795: maximum number of expressions in a list is 1000 **************************************
一个经常被问到的 Linux 问题:为啥 Linux 系统没运行多少程序,显示的可用内存这么少?
看一段线上的gc日志,这是一段CMS完整步骤的日志,对于GC日志格式,不了解的可以再温习一下《GC及JVM参数》
Linux 内核中 , 内存节点 ( Node ) 是 " 内存管理 " 的 最顶层的结构 , 下层分别是 区域 和 页 ;
在 Linux 中大页分为两种: Huge pages (标准大页) 和 Transparent Huge pages(透明大页)。
Linux 内核中 , " 分区伙伴分配器 " 有多种 物理页分配函数 , 所有的 函数 都会调用 __alloc_pages_nodemask 函数 , 该函数是 物理页分配 的 核心函数 ;
页分配器 提供了 释放 物理页的 函数 __free_pages , 该函数定义在 Linux 内核源码的 linux-4.12\mm\page_alloc.c#4083 位置 ;
Java已成为当今市面上很受欢迎的编程软件,对于处于信息高速发达的今天,Java技术已经无处不在,IT行业技术更新的比较快,所以我们肯定是学现在企业需要的技术,而不是一些已经淘汰的技术。手机软件、手机Java游戏、电脑软件等等都有它的身影。那么Java到底能做什么事情呢?Java开发就业岗位你选择哪个
这是很多程序员们钟爱的免费托管个人站点的方式,也是最简单快捷的,因为 Github 作为全球最大的同性交友网站,上面有超多优秀的项目,其中不乏很多大牛的个人站点。我的个人站点最早就是托管在 GitHub 上的。托管后 GitHub 会给你提供一个形如 phygerr.github.io 的域名。
Java开发应用广泛,是目前互联网行业不可缺少的语言,因此越来越多的人选择学习Java。对于初学者而言,学完Java除了可以从事Java开发之外,还可以做哪些具体的工作岗位呢?
上一篇博客 【Linux 内核 内存管理】分区伙伴分配器 ⑤ ( 区域水线 | 区域水线数据结构 zone_watermarks 枚举 | 内存区域 zone 中的区域水线 watermark 成员 ) 中讲解了 区域水线概念 , 本篇博客中开始分析 根据水线 进行 水位控制 的机制 ;
ZGC 启用Large Pages 是一种对应用高性能的折中(吞吐量、低延迟及启动时间),但是却不会带来明显的弊端。除了在应用启动上需要稍微复杂的配置,所需要的系统相关root权限需要手动进行配置。
" 内存区域 " 在 Linux 内核中使用 struct zone 结构体类型进行描述 , zone 枚举定义在 Linux 内核源码的 linux-4.12\include\linux\mmzone.h#350 位置 ;
使用man手册的方式,能大大加快开发速度,可能安装的时候有些安装不完整,下面结合网络上搜索信息进行补充:
Huge pages ( 标准大页 ) 和 Transparent Huge pages( 透明大页 )
在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法.
经常看到一些博客在讲 Linux 内存的 PAGE SIZE 时,都会提到 Linux 默认页大小是 4KB。
在 【Linux 内核 内存管理】物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __alloc_pages_nodemask 函数分配物理页流程 ) 博客中 , 分析了 __alloc_pages_nodemask 函数分配物理页流程如下 :
最近,又遇到了慢 SQL,简单的看了下,又是因为 MySQL 本身优化器还有查询计划估计不准的问题。SQL 如下:
本系列为 CMU 15-445 Fall 2022 Database Systems 数据库系统 [卡内基梅隆] 课程重点知识点摘录,附加个人拙见,同样借助CMU 15-445课程内容来完成MIT 6.830 lab内容。
__alloc_pages_nodemask 函数 定义在 Linux 内核源码的 linux-4.12\mm\page_alloc.c#4003 位置 , 函数原型如下 :
KSM (Kernel Samepage Merging) is running in the Linux kernel and scans the memory of all the virtual machines running on a single host, looking for duplication and consolidating. With KSM we’re able to improve virtual machine density by as much as 300% without impacting performance. One of the great benefits of using Linux as the hypervisor means KSM is not limited to KVM and virtual machines, but can also reduce memory pressure with normal Linux applications. It was integrated in PVE since version 1.5, and is implemented with the package “ksm-control-daemon” (check your version with the cli command “pveversion -v”). [1]
对 Linux 稍有了解的人都知道,Linux 会将物理的随机读取内存(Random Access Memory、RAM)按页分割成 4KB 大小的内存块,而今天要介绍的 Swapping 机制就与内存息息相关,它是操作系统将物理内存页中的内容拷贝到硬盘上交换空间(Swap Space)以释放内存的过程,物理内存和硬盘上的交换分区组成了操作系统上可用的虚拟内存,而这些交换空间都是系统管理员预先配置好的[^1]。
在前文《read文件一个字节实际会发生多大的磁盘IO?》写完之后,本来想着偷个懒,只通过读操作来让大家了解下Linux IO栈的各个模块就行了。但很多同学表示再让我写一篇关于写操作的。既然不少同学都有这个需求,那我就写一下吧。
Linux下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transparent Huge Pages)。
Wal buffer是预写日志缓冲区,作为共享内存缓存每个事务产生的WAL日志。那么这个缓冲区多大呢?它由配置参数wal_buffers控制,默认值是-1,表示大小为shared_buffers的1/32,单位是字节大小,比如64kB。
Linux 内核 " 动态分配内存 " 是通过 " 系统接口 " 实现的 , 下面介绍几个重要的 接口函数 ;
我们已经讨论了一些 man 手册的替代方案。 这些替代方案主要用于学习简洁的 Linux 命令示例,而无需通过全面而过于详细的手册页。 如果你正在寻找一种快速而简单的方法来轻松快速地学习 Linux 命令,那么这些替代方案值得尝试。 现在,你可能正在考虑 —— 如何为 Linux 命令创建自己的 man 式的帮助页面? 这时 “Um” 就派上用场了。 Um 是一个命令行实用程序,可以用于轻松创建和维护包含你到目前为止所了解的所有命令的 man 页面。
前面提到了虚拟内存需要映射物理内存才能使用,这个映射关系被保存在内存中的页表(Page Table)。现代 CPU 架构中一般有 TLB (Translation Lookaside Buffer,翻译后备缓冲,也称为页表寄存器缓冲)存在,在里面保存了经常使用的页表映射项。TLB 的大小有限,一般 TLB 如果只能容纳小于 100 个页表映射项。 我们能让程序的虚拟内存对应的页表映射项都处于 TLB 中,那么能大大提升程序性能,这就要尽量减少页表映射项的个数:页表项个数 = 程序所需内存大小 / 页大小。我们要么缩小程序所需内存,要么增大页大小。我们一般会考虑增加页大小,这就大页分配的由来,JVM 对于堆内存分配也支持大页分配,用于优化大堆内存的分配。那么 Linux 环境中有哪些大页分配的方式呢?
inux processes are implemented in the kernel as instances of task_struct, the process descriptor. The mm field in task_struct points to the memory descriptor, mm_struct, which is an executive summary of a program's memory. It stores the start and end of memory segments as shown above, the number of physical memory pages used by the process (rss stands for Resident Set Size), the amount of virtual address space used, and other tidbits. Within the memory descriptor we also find the two work horses for managing program memory: the set of virtual memory areas and the page tables. Gonzo's memory areas are shown below:
调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 " 整数倍 " , 如果偏移是内存页大小的整数倍 , 则调用 sys_mmap_pgoff 函数 , 继续向下执行 ;
建立分支 git init git remote add origin git@github.com:m2kar/m2kar.github.io.git git checkout -b blog git add . git commit -m "first commit" git push -u origin blog 分支配置 在博客分支中配置 .travis.yml language: go go: - master branches: only: - hugo install: - cur
作为众多打工人中的一员,老李每天早上醒来都是奄奄一息的,那么,怎么着才能打满鸡血变成元气满满的一天呢?当然是拍手舞了,那么拍手舞怎么跳呢?贴心老李自然还要再送你一个在线拍手舞教程:
领取专属 10元无门槛券
手把手带您无忧上云