小编Eri*_*k B的帖子

执行相同工作的服务器的不同 linux 页面缓存行为

我有两组带有 128G 内存的服务器,以它们的配置时间来区分,它们在运行完全相同的守护程序(elasticsearch)时表现非常不同。我使用 elasticsearch 进行全文搜索,而不是日志存储,所以这基本上是一个读取量大的操作,写入次数最少(小于 1MB/s)。这个守护进程 mmap 将大约 350GB 的完整数据集放入其虚拟内存中,然后访问其中的某些部分以服务请求。这些服务器没有配置交换空间。

问题是一组服务器表现良好,每秒发出约 50 个主要故障,平均需要 10MB/s 的磁盘 io 来满足该需求。性能不佳的服务器每秒会出现 500 个主要故障,平均需要约 200MB/s 的磁盘 io 来满足这一要求。磁盘 io 的增加会导致 p95 响应延迟不佳和偶尔过载,因为它达到了 ~550MB/s 的磁盘限制。

它们都位于同一个负载均衡器之后,并且是同一个集群的一部分。我可以看到一台服务器是否表现不佳,这可能是负载差异,但要与 16 台服务器表现不佳和 20 台服务器表现良好有如此明显的区别,它们在不同时间购买+配置,内核/配置级别一定是导致问题的原因。

为了解决这个问题,我怎样才能让这些行为不佳的服务器表现得像那些表现良好的服务器?调试工作应该集中在哪里?

下面是我收集的一些数据,用于查看系统在三个状态中的每一个状态下从sarpage-types工具中执行的操作。

软件: - debian jessie - linux 4.9.25 - elasticsearch 5.3.2 - openjdk 1.8.0_141

首先是来自性能良好的服务器的一些页面错误数据(来自sar -B):

07:55:01 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
08:05:01 PM   3105.89    811.60   2084.40     48.16   3385.30      0.00      0.00    810.35      0.00
08:15:01 …
Run Code Online (Sandbox Code Playgroud)

linux performance virtual-memory elasticsearch

6
推荐指数
1
解决办法
496
查看次数