AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 387644
Accepted
Brad Dwyer
Brad Dwyer
Asked: 2012-05-10 12:53:48 +0800 CST2012-05-10 12:53:48 +0800 CST 2012-05-10 12:53:48 +0800 CST

内存缓存滞后

  • 772

首先让我说这是该主题的后续问题。

通过将 memcached 服务器从 Solaris (SmartOS) 切换到 Ubuntu,这个问题得到了“解决”。现在我们已经将负载增加了大约 5 倍并且再次遇到问题。

我们正在运行一个站点,该站点每分钟处理大约 1000 个请求,每个请求命中 Memcached 大约有 3 次读取和 1 次写入。所以负载大约是每秒 65 个请求。缓存中的数据总量约为 37M,每个键包含的数据量非常小(一个 JSON 编码的整数数组,总计不到 1K)。

我们在这些页面上设置了基准测试脚本,并将数据输入 StatsD 进行日志记录。问题是 Memcached 需要很长时间才能响应的峰值。这些似乎与流量高峰无关。

StatsD 的执行时间

是什么导致了这些尖峰?为什么 memcached 会花一秒钟的时间来回复?我们刚刚启动了第二台服务器以放入池中,它并没有对峰值的频率或严重性产生任何明显的影响。

这是服务器上 getStats() 的输出:

Array
(
    [-----------] => Array
        (
            [pid] => 1364
            [uptime] => 3715684
            [threads] => 4
            [time] => 1336596719
            [pointer_size] => 64
            [rusage_user_seconds] => 7924
            [rusage_user_microseconds] => 170000
            [rusage_system_seconds] => 187214
            [rusage_system_microseconds] => 190000
            [curr_items] => 12578
            [total_items] => 53516300
            [limit_maxbytes] => 943718400
            [curr_connections] => 14
            [total_connections] => 72550117
            [connection_structures] => 165
            [bytes] => 2616068
            [cmd_get] => 450388258
            [cmd_set] => 53493365
            [get_hits] => 450388258
            [get_misses] => 2244297
            [evictions] => 0
            [bytes_read] => 2138744916
            [bytes_written] => 745275216
            [version] => 1.4.2
        )

    [-----------:11211] => Array
        (
            [pid] => 8099
            [uptime] => 4687
            [threads] => 4
            [time] => 1336596719
            [pointer_size] => 64
            [rusage_user_seconds] => 7
            [rusage_user_microseconds] => 170000
            [rusage_system_seconds] => 290
            [rusage_system_microseconds] => 990000
            [curr_items] => 2384
            [total_items] => 225964
            [limit_maxbytes] => 943718400
            [curr_connections] => 7
            [total_connections] => 588097
            [connection_structures] => 91
            [bytes] => 562641
            [cmd_get] => 1012562
            [cmd_set] => 225778
            [get_hits] => 1012562
            [get_misses] => 125161
            [evictions] => 0
            [bytes_read] => 91270698
            [bytes_written] => 350071516
            [version] => 1.4.2
        )

)

编辑:这是 10,000 个值的集合和检索结果。

普通的:

Stored 10000 values in 5.6118 seconds.
Average: 0.0006
High: 0.1958
Low: 0.0003

Fetched 10000 values in 5.1215 seconds.
Average: 0.0005
High: 0.0141
Low: 0.0003

扣球时:

Stored 10000 values in 16.5074 seconds.
Average: 0.0017
High: 0.9288
Low: 0.0003

Fetched 10000 values in 19.8771 seconds.
Average: 0.0020
High: 0.9478
Low: 0.0003
ubuntu php memcached scalability memcache
  • 3 3 个回答
  • 601 Views

3 个回答

  • Voted
  1. DukeLion
    2012-05-16T23:15:43+08:002012-05-16T23:15:43+08:00

    网络堆栈可能有问题。我遇到了与 memcached 类似的问题,原因是 linux conntrack 处理程序用完了。您能否检查峰值前后的 netstat -s -t 输出以检查 tcp 错误和重新传输。您还可以尝试使用 wireshark 查看流量转储以获取有关该问题的更多信息。

    • 0
  2. KM.
    2012-05-24T05:39:09+08:002012-05-24T05:39:09+08:00

    除了检查您的网络统计数据之外,是否可以升级到具有性能改进的版本 1.4.10(或更高版本)?从1.4.10 发行说明开始:

    此版本侧重于线程可扩展性和性能改进。此版本应该能够比撰写本文时任何网卡所能支持的速度更快地反馈数据。

    虽然我们的服务器无法获得您的流量,但在我们的案例中,升级到 1.4.10 有帮助,启用压缩(我们的值大于 1MB)和二进制协议也有帮助。有关详细信息,请参阅我在Drupal SE上的回答。

    • 0
  3. Best Answer
    Brad Dwyer
    2012-06-18T16:13:51+08:002012-06-18T16:13:51+08:00

    问题原来是调用机器耗尽了所有可用的 CPU。这导致了奇怪的问题的发生,并且看起来 memcached 是问题所在,但实际上并非如此。那只是更大问题的一个症状。

    水平扩展 Web 层解决了这个问题。

    如果您使用的是 Joyent,查看正在使用的 CPU 上限的有用命令是jinf -c

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve