Memcached调优

Jun 07, 2016 pm 04:31 PM
memcached 원래의 전체 기사 동조

文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》 项目中有一个对实时响应性比较高的服务,引入了Memcached以减少延迟和减少数据库压力。但是期间遇到了一些问题,这里记录一些调优细节。? 客户端选择 最开始我使用的是 Memcached Java Client,

文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》

Memcached调优项目中有一个对实时响应性比较高的服务,引入了Memcached以减少延迟和减少数据库压力。但是期间遇到了一些问题,这里记录一些调优细节。?

客户端选择

  • 最开始我使用的是 Memcached Java Client,但是最后放弃了,放弃原因包括:
    • 有时会出现的“No Thread For Socket”异常,我记录在 这里;
    • 它不支持NOREPLY模式(在这种模式下,更新缓存的set操作可以不需要Memcached服务端响应,这使得set操作非常非常快)。
  • 现在我使用的是 XMemcached。

统计信息

可以通过nc命令向Memcached服务端发送消息来获取统计信息,例如:

echo "stats settings" | nc localhost 20200 | sort
로그인 후 복사

但是,我更需要客户端的统计信息,尤其是缓存命中率,set操作成功率等等。所以在客户端添加了一个简单的统计模块。每次处理用户请求的过程中,通常有两次向Cache服务端的提交get请求,很多情况下还有两次set请求,合计消耗17ms,在把set请求改成NOREPLY模式以后,这个数减少到10ms以内。因此,对于实时性要求比较高的情形,请打开这个模式,或者干脆使用异步的set。

服务端参数

  • 可以使用-U来使用UDP传输,但是收效不大。
  • -k参数可以阻止换页操作发生,在内存足够的情况下对提高性能有益。
  • -C参数可以禁用CAS。
  • -t指定使用的线程数,如果你是多CPU、多核CPU,可以把这个值配成和总CPU核数一致。
  • -f参数,增长因子,存储大对象把它配大一点可以提高效率,配小一点可以减少浪费。

客户端参数

  • 在使用Memcached Java Client的时候:
    • 由于它会使用direct memory,一定不能加上DisableExplicitGC这个参数,否则就等着OOM吧;
    • 配置大一些的heap size可以提高L1 cache的命中率;
    • 把alive check置为false。
  • 对于实时性和响应性要求比较高的项目,需要做GC调优,主要是GC时延,比如配置MaxGCPauseMillis参数到一个可以接受的值,但是不是越小越好,减低时延的同时会降低吞吐量。
  • 有同事提了个建议,在客户端存放一个cache key的集合,可以在去cache server查询之前,先在本地查看一下是否有缓存记录(比如用 Bloom filter来实现),如果有,再去cache server查询。这个集合可以和实际的cache key有出入,也许一个小时同步一次就可以。但是实际上实现起来比较困难,本身key set的总量非常大,而且Memcached最初提供获取key iterator的接口返回的是一个限定大小key set的iterator,缺乏实际意义(这个接口在后来Memcached的版本中已经被废弃)。至于stats方法,它会把所有cache对象dump出来,只能小规模调试的时候使用。
  • 关于Nagle算法:Nagle的好处是可以批量处理请求,提高TCP包有效部分的大小,从而提高网络利用率,但是如果对每个请求处理时延要求很高的话请关闭。
  • 一定要指定socket timeout或者get/set timeout。

最后,有人做了一个几个Memcached客户端的综合的性能试验: 链接。

文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》

分享到:

你可能也喜欢:

  • Memcached调优 Issue record: “No thread for socket” about Memcached
  • Memcached调优 设计缓存框架需要关注的要素
  • Memcached调优 Ehcache详细解读
  • Memcached调优 OSCache框架源码解析
  • Memcached调优 Javascript Memoizer

Memcached调优

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

고성능 튜닝을 위해 php-fpm을 사용하는 방법 고성능 튜닝을 위해 php-fpm을 사용하는 방법 Jul 08, 2023 am 11:30 AM

고성능 튜닝을 위해 php-fpm을 사용하는 방법

오늘 Toutiao에 기사를 게시하여 어떻게 돈을 벌 수 있나요? 오늘 Toutiao에 기사를 게시하여 더 많은 수입을 얻는 방법! 오늘 Toutiao에 기사를 게시하여 어떻게 돈을 벌 수 있나요? 오늘 Toutiao에 기사를 게시하여 더 많은 수입을 얻는 방법! Mar 15, 2024 pm 04:13 PM

오늘 Toutiao에 기사를 게시하여 어떻게 돈을 벌 수 있나요? 오늘 Toutiao에 기사를 게시하여 더 많은 수입을 얻는 방법!

Memcached 캐싱 기술을 사용하여 PHP 애플리케이션 CPU 사용량을 최적화하는 방법은 무엇입니까? Memcached 캐싱 기술을 사용하여 PHP 애플리케이션 CPU 사용량을 최적화하는 방법은 무엇입니까? Jun 21, 2023 pm 05:07 PM

Memcached 캐싱 기술을 사용하여 PHP 애플리케이션 CPU 사용량을 최적화하는 방법은 무엇입니까?

Go 언어 웹사이트 접속 속도 향상을 위한 튜닝 방법에 대한 자세한 설명 Go 언어 웹사이트 접속 속도 향상을 위한 튜닝 방법에 대한 자세한 설명 Aug 26, 2023 pm 07:27 PM

Go 언어 웹사이트 접속 속도 향상을 위한 튜닝 방법에 대한 자세한 설명

LLM을 미세 조정하는 방법 혁신: PyTorch의 기본 라이브러리 토치튠의 혁신적인 기능과 애플리케이션 가치에 대한 포괄적인 해석 LLM을 미세 조정하는 방법 혁신: PyTorch의 기본 라이브러리 토치튠의 혁신적인 기능과 애플리케이션 가치에 대한 포괄적인 해석 Apr 26, 2024 am 09:20 AM

LLM을 미세 조정하는 방법 혁신: PyTorch의 기본 라이브러리 토치튠의 혁신적인 기능과 애플리케이션 가치에 대한 포괄적인 해석

GPT-4는 하이브리드 대형 모델을 사용합니까? 연구에 따르면 MoE+ 지침 조정이 실제로 대형 모델의 성능을 향상시키는 것으로 나타났습니다. GPT-4는 하이브리드 대형 모델을 사용합니까? 연구에 따르면 MoE+ 지침 조정이 실제로 대형 모델의 성능을 향상시키는 것으로 나타났습니다. Jul 17, 2023 pm 04:57 PM

GPT-4는 하이브리드 대형 모델을 사용합니까? 연구에 따르면 MoE+ 지침 조정이 실제로 대형 모델의 성능을 향상시키는 것으로 나타났습니다.

Linux 시스템의 시스템 튜닝 및 성능 테스트를 수행하는 방법 Linux 시스템의 시스템 튜닝 및 성능 테스트를 수행하는 방법 Nov 07, 2023 am 11:33 AM

Linux 시스템의 시스템 튜닝 및 성능 테스트를 수행하는 방법

ASUS 플라잉 포트리스 7--오리지널 ASUS 플라잉 포트리스 7--오리지널 Jul 14, 2023 pm 10:09 PM

ASUS 플라잉 포트리스 7--오리지널

See all articles