glibc

Redis内存

半腔热情 提交于 2020-08-07 14:56:13
Redis内存消耗:自身内存 + 对象内存 + 缓冲内存 + 内存碎片 自身内存:Redis进程自身内存占用量很小,大约在3.8M左右。 对象内存:sizeof(keys) + sizeof(values),键和值的内存都需要关注 缓冲内存:主要包括客户端缓冲、复制积压缓冲区、AOF缓冲区 客户端缓冲:指所有接入到Redis服务器TCP连接的输入输出缓冲,超过1G会自动断开 复制积压缓冲区:用于实现部分复制功能补救措施的缓冲区 AOF缓冲区:Redis重写期间保存最近的写入命令,消耗内存取决于AOF重写时间及写入命令量 内存碎片:Redis默认使用jemalloc分配器、可选glibc、tcmalloc,为了更好的管理和复用内存,一般采用内存块进行分配,通常采用数据对齐或安全重启处理内存碎片超标情况 子进程内存消耗:子进程fork后与父进程享有同一物理内存,AOF/RDB期间父进程处理写请求时会复制出请求的页副本进行写操作,子进程依然读取父进程快照 Redis fork期间产生的子进程需要消耗的内存由持久化期间写入命令量决定 设置sysctl vm.overcommit_memory = 1允许内存分配所有的物理内存 排查当前系统是否支持THP,防止copy-on-write期间内存过度消耗 来源: oschina 链接: https://my.oschina.net/u

windows下的getopt/getoptlong函数

房东的猫 提交于 2020-08-07 08:38:16
windows下的getopt/getoptlong函数 getopt/getopt_long 函数是GNU C中的函数,在linux编程中很常用到。这里就不介绍了。 windows下没有找到类似的函数,自己写一个又浪费时间,于是乎从glibc中找出来。 这里放出两个版本的下载地址 http://files.cnblogs.com/files/oloroso/getopt--from-glibc-2.15.tar.gz http://files.cnblogs.com/files/oloroso/getopt-win-from-glibc-2.2.5.tar.gz 下载GLibC源码 首先需要下载glibC的源代码文件,这个文件比较大,但是我们只需要其中的几个文件而已。 如果是后面给出的链接下载的 glibc 源码包,只需要两个文件。如果是比较新版本的 glibc ,可能需要四个文件( getopt.h/getopt_int.h/getopt.c/getopt_init.c ) 这个只需要图中所示的两个文件即可。下载之后找到这两个文件解压出来即可。 下载地址 http://ftp.ntu.edu.tw/gnu/libc/#glibc-2.2.5.tar.gz 这是 glibc-2.2.5 的压缩包中间提取的文件 下面是glibc-2.15中需要提取的文件 修改getopt.c

滴滴云服务器上安装Oracle12cR2单实例数据库

≯℡__Kan透↙ 提交于 2020-08-07 08:14:03
一、相关说明 Oracle数据库 是由美国甲骨文公司推出的一款优秀的关系型数据库。当前最新版为 Database 19c 。本文简述Oracle Database 12cR2在滴滴云主机上的安装过程。如需更权威的指导方法请参考 Oracle官方安装文档 。 二、环境概述 一台DC2云主机(2c4g) 一个EIP(1M) 一块云盘(140G) 操作系统:CentOS7.6 数据库:Oracle Database 12cR2 三、准备工作 1.必备的软件包: bc binutils-2.23.52.0.1-12.el7 (x86_64) compat-libcap1-1.10-3.el7 (x86_64) compat-libstdc++-33-3.2.3-71.el7 (i686) compat-libstdc++-33-3.2.3-71.el7 (x86_64) glibc-2.17-36.el7 (i686) glibc-2.17-36.el7 (x86_64) glibc-devel-2.17-36.el7 (i686) glibc-devel-2.17-36.el7 (x86_64) ksh libaio-0.3.109-9.el7 (i686) libaio-0.3.109-9.el7 (x86_64) libaio-devel-0.3.109-9.el7 (i686)

SpringCloud:微服务 Docker 化之基础环境

谁说胖子不能爱 提交于 2020-08-07 04:21:41
1. 容器化 Docker 的横空出世,给了容器技术带来了质的飞跃,Docker 标准化了服务的基础设施,统一了应用的打包分发,部署以及操作系统相关类库等,解决了测试生产部署时环境差异的问题。对于运维来讲,由于镜像的不可变性,更容易进行服务部署和回滚操作。利用各种第三方容器管理平台,实现一键部署、动态伸缩等操作变的轻而易举。 2. 基础镜像选择 在操作系统的选择上,可选择传统的 CentOS 、 Ubuntu 或者更为轻量化的 Alpine 。比如 CentOS 或者 Ubuntu 的镜像都在 100MB 以上,压缩后也都有大几十 MB ,而轻量化的 Alpine 3.10 版本镜像大小约为 5.58MB ,而它压缩后更是仅有 2MB 大小左右。 Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine 还提供了自己的包管理工具 apk 。 关于基础镜像的选择,一个是考虑镜像的大小,另一个是只提供最小的依赖包。关于第二点,不同的服务所需要的依赖包是不同的,这里不再展开讨论,如果仅从第一点考虑的话, Alpine 肯定是首选,镜像越小,远程推拉越快

k8s集群部署mysql(docker自创建镜像)

江枫思渺然 提交于 2020-08-06 17:13:49
前言 公司要在k8s集群中使用mysql服务,作为对开发环境的测试数据存储.目前这个服务已经在k8s集群中稳定运行.话不多说.直接开搞 环境说明:k8s集群版本:1.17 mysql版本:mysql-5.7.20 1创建dockerfille编写 FROM centos:7 RUN ping -c 1 www.baidu.com RUN yum remove -y libnuma.so.1 RUN yum install -y vim net-tools cmake numactl bison bison-devel libaio-devel gcc gcc-c++ git ncurses-devel RUN groupadd mysql && useradd mysql -g mysql && mkdir /home/mysql/mydata/ && mkdir /home/mysql/mysql_logs && mkdir /home/mysql/scripts && mkdir /home/mysql/cnf ADD ./mysql-5.7.20-linux-glibc2.12 -x86_64.tar.gz /home/mysql/ RUN chown mysql:mysql -R /home/mysql/ && cd /home/mysql/ && \ mv mysql-

MySQL5.7升级到8.0过程详解

﹥>﹥吖頭↗ 提交于 2020-08-06 13:28:51
前言: 不知不觉,MySQL8.0已经发布好多个GA小版本了。目前互联网上也有很多关于MySQL8.0的内容了,MySQL8.0版本基本已到稳定期,相信很多小伙伴已经在接触8.0了。本篇文章主要介绍从5.7升级到8.0版本的过程及注意事项,有想做版本升级的小伙伴可以参考下。 1.升级前准备及注意事项 首先,我们要大概了解下MySQL5.7和8.0有哪些不同,参考官方文档和其他网友文章,概括总结出MySQL8.0以下几点新特性: 默认字符集由latin1变为utf8mb4。 MyISAM系统表全部换成InnoDB表。 JSON特性增强。 支持不可见索引,支持直方图。 sql_mode参数默认值变化。 默认密码策略变更。 新增角色管理。 支持窗口函数,支持Hash join。 根据版本变化及官方升级教程,列举出以下几点注意事项: 注意字符集设置。为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和比较规则。 密码认证插件变更。为了避免连接问题,可以仍采用5.7的mysql_native_password认证插件。 sql_mode支持问题。8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER。 是否需要手动升级系统表。在MySQL 8.0.16版本之前

TCMalloc:线程缓存的Malloc

为君一笑 提交于 2020-08-06 09:59:59
动机 TCMalloc要比glibc 2.3的malloc(可以从一个叫作ptmalloc2的独立库获得)和其他我测试过的malloc都快。ptmalloc在一台2.8GHz的P4机器上(对于小对象)执行一次malloc及free大约需要300纳秒。而TCMalloc的版本同样的操作大约只需要50纳秒。malloc版本的速度是至关重要的,因为如果malloc不够快,应用程序的作者就很有可能在malloc之上写一个自己的自由列表。这就可能导致额外的代码复杂度,以及更多的内存占用――除非作者本身非常仔细地划分自由列表的大小并经常从自由列表中清除空闲的对象。 TCMalloc也减少了多线程程序中的锁争用情况。对于小对象,几乎已经达到了零争用。对于大对象,TCMalloc尝试使用粒度较好和有效的自旋锁。ptmalloc同样是通过使用每线程各自的场地来减少锁争用,但是ptmalloc2使用每线程场地有一个很大的问题。在ptmalloc2中,内存可能会从一个场地移动到另一个。这有可能导致大量空间被浪费。例如,在一个Google的应用中,第一阶段可能会为其URL标准化的数据结构分配大约300MB内存。当第一阶段结束后,第二阶段将从同样的地址空间开始。如果第二个阶段被安排到了一个与第一阶段什?用的场地不同的场地,这个阶段不会复用任何第一阶段留下的的内存,并会给地址空间添加另外一个300MB

关于redis,你需要了解的几点!

﹥>﹥吖頭↗ 提交于 2020-08-06 08:04:33
一、关于 redis key: 1、是二进制安全的,也就是说,你可以使用任何形式的二进制序列来作为key,比如一个string,或者一个jpg图片的数据,需要说明的是,空字符串也是一个有效的key。 2、不建议使用过长的key,影响内存占用及数据查性能,对于过长的key,可以通过hash(例如SHA1)处理转换。 3、建议使用有意义及统一格式的key。 4、最大允许key大小为512M。 二、String 类型应用: 1、作为原子计数器:incr、decr、incrby 2、结合append命令,作为基于时间的增量序列。 3、随机访问及获取值区域,getrange、setrange。 附:需要注意的是append及range操作容易引起内存浪费和碎片化问题。 三、hash 类型:ziplist or hashtable 1、单个hash最多支持2 32 - 1个键值对。 2、关于hash类型的内部编码: ziplist(压缩列表) & hashtable(哈希表) 配置:hash-max-ziplist-entries(hash类型最大kv数据,默认512)、hash-max-ziplist-value(单个v值最大值, 默认64) redis 采用何种结构取决于hash中元素数及元素值得大小,当同时满足小于配置时,redis使用ziplist编码存储

xenomai内核解析之信号signal(一)---Linux信号机制

百般思念 提交于 2020-08-05 00:56:19
版权声明:本文为本文为博主原创文章,转载请注明出处。如有错误,欢迎指正。博客地址: https://www.cnblogs.com/wsg1100/ 目录 1. Linux信号 1.1注册信号处理函数 1.2 信号的发送 1.3 信号的处理 2 linux 多线程信号 1. Linux信号 涉及硬件底层,本文以X86平台讲解。 信号是事件发生时对进程的通知机制,是操作系统提供的一种软件中断。信号提供了一种异步处理事件的方法,信号与硬件中断的相似之处在于打断了程序执行的正常流程,例如,中断用户键入中断键(Ctrl+C),会通过信号机制停止应用程序。 信号的几种产生方式: 按键产生 当用户按某些按键时,引发终端产生的信号。 ctrl+C产生 SIGINT信号、ctrl+\产生SIGQUIT信号、ctrl+z产生SIGTSTP 信号 系统调用产生 进程调用系统调用函数将任意信号发送给另一个进程或进程组。如:kill() 、raise()、abort() 软件条件产生 当操作系统检测到某种软件条件时,使用信号通知有关进程。如:定时器函数alarm() 硬件异常产生 由硬件检测到某些条件,并通知内核,然后内核为该条件发生时正在运行的进程产生适当的信号。如:非法操作内存(段错误)SIGSEGV信号、除0操作(浮点数除外)SIGFPE 信号、总线错误SIGBUS信号。 命令产生

涨见识了,在终端执行 Python 代码的 6 种方式!

删除回忆录丶 提交于 2020-08-04 23:46:58
原作: BRETT CANNON 译者:豌豆花下猫@Python猫 英文: https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the-terminal 为了我们推出的 VS Code 的 Python 插件 [1],我写了一个 简单的脚本来生成变更日志 [2](类似于 Towncrier [3],但简单些,支持 Markdown,符合我们的需求)。在发布过程中,有一个步骤是运行 python news ,它会将 Python 指向我们代码中的"news"目录。 前几天,一位合作者问这是如何工作的,似乎我们团队中的每个人都知道如何使用 -m ?(请参阅我的有关 带 -m 使用 pip 的文章 [4],了解原因)(译注:关于此话题,我也写过一篇 更为详细的文章 ) 这使我意识到其他人可能不知道有五花八门的方法可以将 Python 指向要执行的代码,因此有了这篇文章。 1、通过标准输入和管道 因为如何用管道传东西给一个进程是属于 shell 的内容,我不打算深入解释。毋庸置疑,你可以将代码传递到 Python 中。 # 管道传内容给 python echo "print('hi')" | python 如果将文件重定向到 Python,这显然也可以。 # 重定向一个文件给 python python < spam.py