在varnish机器上发现一个比较奇怪的现象。在可用内存还有3G左右,系统已经开始使用交换空间,也就是说有数据在内存与硬盘之间换进换出了。在当前的流量下,这个对整体性能的影响虽不大。但这个问题有必要彻底查一下。以避免在高负载下可能的问题。

硬件

机器使用Dell r710,两颗CPU,每个CPU上配了8G内存,一共是16G内存。给varnish进程分配了10G。

虚虚内存相关的参数

vm.swappiness = 0

经过一段时间的苦思,我觉得这可能跟NUMA内存分配与访问模式有关。下面是对应的探索过程。

NUMA内存布局及使用情况:

[root@lion ~]# numactl --hardware

available: 2 nodes (0-1)

node 0 size: 8080 MB  (Node0总内存)

node 0 free: 3326 MB  (Node0空闲内存)

node 1 size: 8054 MB  (Node1总内存)

node 1 free: 171 MB   (Node1空闲内存)

node distances:

node   0   1

0:  10  20

1:  20  10

从上面可以看出,两个node的内存分配不均衡。虽然node0上还有将近3G的空闲内存,但node1只有171M空间内存,这样在node1内,仍然会将部分数据交换到硬盘上。这也是系统使用交换空间的原因。

这种分配不均衡,我直觉跟varnish有关,下面先找到varnish的进程号:

[root@lion ~]# ps auwx | grep varnish

root      1758  0.0  0.0 118016  1212 ?        Ss   Apr28   0:00 /usr/sbin/varnishd -P /var/run/varnish.pid -a :80 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -w 1,1000,120 -u varnish -g varnish -S /etc/varnish/secret -s file,/var/lib/varnish/varnish_storage.bin,10G -p first_byte_timeout 600 -p between_bytes_timeout 600

varnish   1760  2.5 67.6 11740556 11112408 ?   Sl   Apr28 550:00 /usr/sbin/varnishd -P /var/run/varnish.pid -a :80 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -w 1,1000,120 -u varnish -g varnish -S /etc/varnish/secret -s file,/var/lib/varnish/varnish_storage.bin,10G -p first_byte_timeout 600 -p between_bytes_timeout 600

再看varnish的内存map情况:

[root@lion ~]# cat /proc/1760/numa_maps

00400000 default file=/usr/sbin/varnishd mapped=65 mapmax=2 N0=48 N1=17

00658000 default file=/usr/sbin/varnishd anon=3 dirty=3 N0=3

0065b000 default anon=2 dirty=2 mapmax=2 N0=2

0085a000 default file=/usr/sbin/varnishd mapped=2 mapmax=2 N0=2

2aaaab800000 default file=/var/lib/varnish/varnish_storage.bin dirty=54 mapped=2621440 N0=830743 N1=1790697

2aaaab800000         对应内存区域的起始虚拟内存地址

default              对应内存区域的NUMA内存分布策略,如果没有指定,缺省采用default策略。

anon=3               分配了多少匿名页

mapped=2621440       分配了多个页

dirty=54             有多少脏页,即内容被程序修改过

N0=830743            在Node0上分配了多少页

N1=1790697           在Node1上分配了多少页

从上面对varnish_storage.bin的映射情况看出,Node0上有83万左右的页,而Node1上有179万左右的页,两边很不均衡。

那应该怎么样才能将两个node的内存使用变得均衡呢。

首先,linux在NUMA方面的策略在控制到进程粒度,可以设置某个进程的NUMA分配策略,子进程缺省是继承父进程的分配策略。通过运行numactl命令起动进程,新起动的进程将按numactl中指定的参数修改NUMA方面的策略。

看一下numactl命令的参数:

[root@lion ~]# numactl --help

numactl: unrecognized option `--help'

usage: numactl [--interleave=nodes] [--preferred=node]

[--physcpubind=cpus] [--cpunodebind=nodes]

[--membind=nodes] [--localalloc] command args ...

numactl [--show]

numactl [--hardware]

numactl [--length length] [--offset offset] [--mode shmmode] [--strict]

--shm shmkeyfile | --file tmpfsfile | --shmid id

[--huge] [--touch]

memory policy

memory policy is --interleave, --preferred, --membind, --localalloc

nodes is a comma delimited list of node numbers or A-B ranges or none/all.

cpus is a comma delimited list of cpu numbers or A-B ranges or all

all ranges can be inverted with !

the old --cpubind argument is deprecated.

use --cpunodebind or --physcpubind instead

length can have g (GB), m (MB) or k (KB) suffixes

比较重要参数有:

--localalloc          在进程所运行的CPU对应的node上分配内存,这是缺省的方式。

--interleave=nodes    以round-robin在方式在多个node上进行node分配。一个进程即使只在一个CPU上运行,也需要跨CPU进行内存访问

--physcpubind=cpus    将进程绑定在对应的CPU上

--cpunodebind=nodes   将进程绑定在对应的nodes上

这样,需要修改varnish的起动脚本,/etc/init.d/varnish

#exec="/usr/sbin/varnishd"

exec="/usr/bin/numactl --interleave all /usr/sbin/varnishd"

这个varnish运行后,所使用的内存将均匀地从两个node上进行分配。

转载从:李小红_新浪博客

varnish服务器在内存大量富余时使用交换空间的原因及解决方法相关推荐

  1. mysql 死锁原因_Mysql并发时经典常见的死锁原因及解决方法

    1.mysql都有什么锁 MySQL有三种锁的级别:页级.表级.行级. 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁:锁定粒 ...

  2. layui表单提交使用form.on(‘submit(sub)‘,function (){}) 使用ajax请求时回调不执行的原因及解决方法

    layui表单提交使用form.on('submit(sub)',function (){}) 使用ajax请求时回调不执行的原因及解决方法 参考文章: (1)layui表单提交使用form.on(' ...

  3. MySQL学习笔记(五)并发时经典常见的死锁原因及解决方法

    MySQL学习笔记(五)并发时经典常见的死锁原因及解决方法 参考文章: (1)MySQL学习笔记(五)并发时经典常见的死锁原因及解决方法 (2)https://www.cnblogs.com/tiny ...

  4. win7服务器 文件共享,win7系统共享文件时提示没有启动文件服务器服务的解决方法...

    win7系统共享文件时提示没有启动文件服务器服务的解决方法? 我们在操作win7系统电脑的时候,常常会遇到win7系统共享文件时提示没有启动文件服务器服务的问题.那么出现win7系统共享文件时提示没有 ...

  5. windwos服务器网站504,打开网站出现504 gateway time-out的原因及解决方法

    我们在访问大流量网站或者运营有较多数据的网站时候,偶尔会出现504 Gateway Time-out错误,那么造成504 gateway time-out是什么原因呢?这多是网站服务器配置不当导致的, ...

  6. 飞车手游服务器维护,QQ飞车手游更新出现异常怎么办 更新异常原因及解决方法技巧...

    最近很多玩家都在体验QQ飞车手游吧,而且最近又一次更新,更新之后,大家发现出现各种异常BUG,那么QQ飞车手游更新出现异常怎么办?更新异常原因及解决方法!如果你也遇到这样的情况,不妨来看看小编是如何解 ...

  7. 服务器电源输出电压不稳定,电源模块输出电压变低的原因和解决方法

    描述 为什么输出电压标称为5V的电源模块实际输出只有4.8V呢,这里将为您介绍电源模块输出电压低的原因及解决方法. 一般来说,模块在上板前都会进行功能测试,验证模块的电压输出是否正常.电源模块输出有电 ...

  8. 火柴人联盟2服务器维护,火柴人联盟2闪退黑屏原因及解决方法汇总

    火柴人联盟2很多玩家已经接触过了,那么游戏闪退黑屏怎么办呢?有不少玩家都遇到了,下面为大家介绍的是游戏闪退黑屏的原因及解决方法,一起来看看吧. 火柴人联盟2闪退黑屏怎么办? 闪退黑屏原因 1.有可能是 ...

  9. 计算机开机后无法网络拨号怎样处理,拨号上网时电脑假死的原因和解决方法

    用拨号上网时,有时候遇到电脑假死, 就是刚装了宽带的时候,电脑一开机出现拨号连接的时候电脑就死机, 其实电脑没有死机, 就是假死,要过上几分钟电脑自动好.没什么大问题,只是对于电脑初学者来说难免有一些 ...

最新文章

  1. 成员变量和成员函数分开存储
  2. rpm、yum、编译安装轻松管理centos7程序包
  3. cimage和gdi绘图效率比较_GDI+和GDI绘图性能对比实验
  4. c语言查找星期几,新手做的日历表及查找日期是星期几
  5. 【STC15库函数上手笔记】6、ADC
  6. 【Python学习】 - 手写数字识别 - python读入mnist数据集的多种方法
  7. 论文学习18-Relation extraction and the influence of automatic named-entity recognition(联合实体关系抽取模型,2007)
  8. 从事前到事后,云数据库 Redis MongoDB 安全体系全揭秘!
  9. VC++中使用内存映射文件处理大文件
  10. python机器学习2021年6月19日09:35:06
  11. 【nginx】nginx 原理
  12. 异常处理简单例子--python except Exception as e
  13. ubuntu windows mysql 中文乱码解决
  14. cesium版本之间如何兼容_【JS】cesium与three.js 结合的栗子,结合了一下网友们的栗子,解决了three.js 高版本模型出不来的问题...
  15. Illustrator 教程,如何在 Illustrator 中重新塑造文本?
  16. ZigBee协议分析仪Smart PacketSniffer
  17. 自建pop邮件服务器,POP是什么?怎样开通?
  18. sqlserver如何快速生成不重复的随机数据
  19. github上很好的iOS资源集锦
  20. logback之三:输出日志到文件(滚动)

热门文章

  1. 库存处理(第一次做库存,希望让需要者帮助得到帮助,让有经验者提出指导)...
  2. Angularjs切换网站配色模式简单示例1(切换css文件)
  3. android来电事件,android – 来电时没有响铃事件
  4. linux sed 循环多行,linux sed 多行处理详细总结
  5. mac android 录屏软件下载,苹果录屏app下载 苹果录屏 for Android V2.1.3 安卓手机版 下载-脚本之家...
  6. 插入网站连接_带你了解网站设计的五个基本步骤
  7. java 静态方法 多线程_Java静态方法的线程安全性问题
  8. 计算机平面设计专业有哪些课程,计算机平面设计专业课程有哪些?
  9. Java并发包中Semaphore的工作原理、源码分析及使用示例
  10. 向上2021·新消费品牌发展报告