Redis的Memory命令讲解
一、简述Memory指令是Redis4.0版本更新的特性,可用于详细的分析内存的使用情况,内存使用诊断,内存碎片回收等工作; 可以通过memory help指令打印出memory指令的信息,详细信息如下所示: 1) MEMORY <subcommand> arg arg ... arg. Subcommands are:2) DOCTOR - Return memory problems reports.3) MALLOC-STATS -- Return internal statistics report from the memory allocator.4) PURGE -- Attempt to purge dirty pages for reclamation by the allocator.5) STATS -- Return information about the memory usage of the server.6) USAGE <key> [SAMPLES <count>] -- Return memory in b...
TCL语言入门
一、简述Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以释运行,一条TCL的命令串包含若干条命令,命令使用换行符或分号来隔开;而每一条命令包含若干个域(field),域使用空白(空格或TAB)来隔开——第一个域是命令的名字,其它的域是该命令的参数。 二、基本语法2.1、注释注释在调试的过程中轻常碰到。TCL语言的注释符号是 # ,加在每一行的最前面。 2.2、脚本、命令、单词一个TCL 脚本 可以包含一个或多个 命令 。 命令 之间必须用换行符或分号隔开,推荐使用换行符分开。下面就是一个合法的TCL 脚本 ,它由两个赋值 命令 组成; set a 1set b 2 TCL的每一个 命令 包含一个或几个 单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用 空格 或 TAB键 隔开。上面代码中的 set , a , 1 分别是三个单词。 TCL解释器对一个 命令 的求值过程分为两部分:分析和执行; 在分析阶段,TCL 解释器运用规则把 命令 分成一个个独立的单词,同时进行必要的 置换(substitution) ; 在执行阶段,TCL 解释器会把第...
localtime函数死锁分析
一、简介前段时间,线上的redis实例出现了一些异常的情况,具体变现就是bgsave子进程hang住了,从而引发了后续的很多问题,通过排查最终发现是localtime相关函数引起的,这里做一下总结记录。 C 库函数 *struct tm *localtime(const time_t timer) 作用是根据本地时区信息将 time 函数获取的 UTC 时间调整为为本地时间,并将具体的时间信息填充到tm结构体之中; 二、详细介绍由于localtime函数的具体底层实现的缘由,在某些场景下会触发localtime函数导致的死锁问题,这里详细的分析原因以及后续的处理方案; 2.1 底层实现分析localtime函数底层的调用栈信息为: localtime() => __tz_convert() localtime 函数的底层代码实现(代码位于./time/localtime.c): /* Return the `struct tm' representation of *T in local time. */struct tm *localtime (...
Clang-Format格式化工具
Clang-Format 是基于 clang 的一个命令行工具,这个工具能够自动化格式 C/C++/Obj-C 代码,支持多种代码风格(Google, Chromium, LLVM, Mozilla, WebKit),同时也支持自定义风格(通过编写.clang-format文件),这里记录了常用的配置 Clang-Format 常用的配置项及其含义。 一、安装方式# macbrew install clang-format 二、参数解析官方文档的参数解析为:http://clang.llvm.org/docs/ClangFormatStyleOptions.html 2.1 参数解析BasedOnStyle样式信息: LLVM:一种遵循LLVM coding standards的样式; Google:一种遵循Google’s C++ style guide的样式; Chromium:一种遵循Chromium’s style guide的样式; Mozilla:一种遵循Mozilla’s style guide的样式; WebKit:一种遵循WebKit’s...
hashlimit-Iptables笔记
一、简介hashlimit是iptables的一个匹配模块,用它结合iptables的其它命令可以实现限速的功能。注意:单独hashlimit模块是无法进行限速的; 二、原理介绍实际上,使用 hashlimit 进行限速主要包括两个步骤: 对符合 hashlimit 匹配规则包放行 丢弃/拒绝未放行的包 2.1 令牌桶模型hashlimit 的匹配方式是基于令牌桶(Token bucket)的模型,令牌桶是一种网络通讯中常见的缓冲区工作原理,它有两个重要的参数,令牌桶容量n和令牌产生速率s; 令牌桶容量n:可以把令牌当成是门票,而令牌桶则是负责制作和发放门票的管理员,它手里最多有n张令牌。初始时,管理员开始手里有n张令牌,每当一个数据包到达后,管理员就看看手里是否还有可用的令牌。如果有,就把令牌发给这个数据包,hashlimit 就告诉iptables,这个数据包被匹配了,而当管理员把手上所有的令牌都发完了,再来的数据包就拿不到令牌了;这时,hashlimit 模块就告诉 iptables ,这个数据包不能被匹配,对应参数--hashlimit-burst; 令牌...
Linux内核软件框架-Netfilter概述
一、简述Netfilter是Linux内核中的一个软件框架,用于管理网络数据包。不仅具有网络地址转换(NAT)的功能,也具备数据包内容修改、以及数据包过滤等防火墙功能。利用运作于用户空间的应用软件,如iptables等,来控制Netfilter,系统管理者可以管理通过Linux操作系统的各种网络数据包。1990年代,Netfilter在Linux 2.3.15版时进入Linux内核,正式应用于Linux 2.4版。 现今许多市面上许多的IP分享器或无线网络路由器(Wireless router),多是嵌入式Linux平台,并利用Netfilter的数据包处理能力,提供NAT以及防火墙的功能。此外,Netfilter平台的模块化设计使得功能具可扩展性,以及Linux核心本身属于开放的源代码,能够免费获取源代码进行修改与扩展。Netfilter平台中制定了五个数据包的挂载点(Hook),分别是PRE_ROUTING、INPUT、OUTPUT、FORWARD与POST_ROUTING。 二、原理Linux网络内核中存在5条内置chain,针对于每条chain,Netfilter都有与之...
PrettyTable-Python使用笔记
一、简述PrettyTable是一个简单的Python库,旨在快速,轻松地在视觉上吸引人的ASCII表中表示表格数据。 它的灵感来自PostgreSQL shell psql中使用的ASCII表。 PrettyTable允许选择要打印的列,列的独立对齐(左对齐或右对齐或居中)以及通过指定行范围打印“子表”。GitHub 二、安装与使用# 安装:使用pip可以方便的安装PrettyTablepip install PrettyTable# 使用:python代码中引入该库import prettytable as pt 三、相关API介绍3.1、创建表3.1.1、普通创建表:import prettytable as pttb = pt.PrettyTable() 3.1.2、从已有的文件中创建# 【利用CSV文件创建】# + 变量pt将是一个完全填充的PrettyTable对象;# + CSV文件的第一行将被解释为字段名称并用于表头;# + 可以通过传递“field_names”关键字参数来指定自己的字段名称;from prettytable import from_c...
Linux下的Cache/Buffer
经常在使用 Linux 的时候会发现有一些内存经常被 Cache 和 Buffer 占用,而关于这两者之间的关系与区别却不了解,这篇文章主要就是介绍一下两者的区别与相关的运维手段。 一、含义 Cache(缓存):指 CPU 和内存之间高速缓存,为了调高CPU和内存之间数据交换而设计,用来给文件做缓存(相关的是PageCache),主要是针对读操作设计的; Buffer(缓冲):指在写入磁盘前的存储在内存中的内容,为了提高内存和硬盘(或其他I/O设备的数据交换而设计),主要是针对写操作设计的; 下面为Linux下free指令显示的信息,以下简单描述一下各选项的含义: [root@* ~]# free -g total used free shared buff/cache availableMem: 125 2 109 1 13 120Swap: 7 ...
Netfilter的数据包过滤器iptables
一、iptables简介iptables是一款基于Netfilter的Linux防火墙的管理工具,可实现完成封包过滤、封包重定向和网络地址转换(NAT)等功能。 二、iptables的基本概念2.1、iptables的规则表 表(tables):提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理; 链(chains):数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则; 规则(rules):当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件,如果满足规则,系统就会根据该条规则所定义的方法处理该数据包,如果不满足规则,继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包; 2.2、iptables的规则链 PREROUTING链:数据进入网卡,首先会进入PREROUTING链,内核依据数据包的目的IP判断是否需要传送...
共享库LD_PRELOAD环境变量分析
一、简介LD_PRELOAD是Linux/Unix系统的一个环境变量,它影响程序的运行时的链接(Runtime linker),它允许在程序运行前定义优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入程序,从而达到特定的目的。 动态库的搜索路径搜索的先后顺序是: 编译目标代码时指定的动态库搜索路径(可指定多个搜索路径,按照先后顺序依次搜索); 环境变量LD_LIBRARY_PATH指定的动态库搜索路径(可指定多个搜索路径,按照先后顺序依次搜索); 配置文件/etc/ld.so.conf中指定的动态库搜索路径(可指定多个搜索路径,按照先后顺序依次搜索); 默认的动态库搜索路径/lib; 默认的动态库搜索路径/usr/lib; 二、模拟实现这里并不是直接替换系统中的函数调用,而是采用添加hook的方式进行; main.c #include ...

