squid内存相关

Squid内存相关

https://wiki.squid-cache.org/SquidFaq/SquidMemory

为什么Squid使用那么多的内存!

 

出于性能原因,Squid使用了大量内存。从磁盘读取内容要比直接从内存读取花费更多,更长的时间。

每个缓存对象的少量元数据都保存在内存中。这是StoreEntry数据结构。在32位体系结构上为56字节,在64位体系结构上为88字节。此外,每个StoreEntry都有一个16字节的缓存键(MD5校验和)。这意味着缓存中每个对象的内存中有72或104字节的元数据。因此,具有1,000,000个对象的缓存需要72MB的内存用于元数据。实际上,它所需要的远远不止这些。

Uses of memory by Squid include:

reasonparameterexplanation
Disk buffers for reading and writing--
Network I/O buffersread_ahead_gap *D
IP Cache contentsipcache_sizeDNS
FQDN Cache contentsfqdncache_sizeDNS
Netdb ICMP measurement database-N
Per-request state information, including full request and reply headers-D
Miscellaneous statistics collection-D
Index of on-disk cache (metadata, kept in memory)cache_dirI
In-memory cache with "hot objects"cache_memM+I

Explanation of letters:

.explanation
Ddynamic; more memory is used if more users visit more websites
I10 MB of memory per 1 GB on disk for 32-bit Squid 14 MB of memory per 1 GB on disk for 64-bit Squid
Nnot used often
Mrule of thumb: cache_mem is usually one third of the total memory consumption. On top of the value configured there is also memory used by the index of these objects (see 'I').
DNSnot recommended to change. Only increase for very large caches or if there is a slow DNS server
  • 不是很明白

  • read_ahead_gap仅限制从服务器读取但尚未传递到客户端的数据窗口。至少有两个缓冲区(客户端到服务器和服务器到客户端的方向),而对于当前事务正在通过的每个ICAP服务,又有一个缓冲区。

还有间接使用的内存:操作系统具有用于TCP连接和文件系统I / O的缓冲区。

 

我该如何判断我的Squid进程正在使用多少内存?

  • ps -aux

wessels ~ 236% ps -axuhm
USER       PID %CPU %MEM   VSZ  RSS     TT  STAT STARTED       TIME COMMAND
squid     9631  4.6 26.4 141204 137852  ??  S    10:13PM   78:22.80 squid -NCYs
  • top

last pid: 20128;  load averages:  0.06,  0.12,  0.11                   14:10:58
46 processes:  1 running, 45 sleeping
CPU states:     % user,     % nice,     % system,     % interrupt,     % idle
Mem: 187M Active, 1884K Inact, 45M Wired, 268M Cache, 8351K Buf, 1296K Free
Swap: 1024M Total, 256K Used, 1024M Free
​
  PID USERNAME PRI NICE SIZE    RES STATE    TIME   WCPU    CPU COMMAND
 9631 squid     2   0   138M   135M select  78:45  3.93%  3.93% squid
  • 要求Squid进程报告其自身的内存使用情况

这在“缓存管理器” 信息页面上可用。您的输出可能会有所不同,具体取决于您的操作系统和Squid版本,但看起来与此类似:

鱿鱼的资源使用情况:
最大常驻大小:137892 KB
通过mstats()获取鱿鱼的内存使用情况:
舞台上的总空间:140144 KB
总计免费:8153 KB 6%

如果您的RSS(居民集大小)值远低于您的进程大小,则您的缓存性能很可能会因分页而受到影响

可查看cache_manager的相关信息:

https://wiki.squid-cache.org/action/show/Features/CacheManager?action=show&redirect=SquidFaq%2FCacheManager

为什么Squid使用这么多的缓存?

看来运行Squid的计算机正在使用大量内存“缓存的内存”

 KiB Mem:   4037016 total,  3729152 used,   307864 free,   120508 buffers
 KiB Swap:  8511484 total,        0 used,  8511484 free.  2213580 cached Mem

这是Linux中的正常行为-只要有可用内存,从磁盘读取的所有内容都会缓存在RAM中。 如果以其他方式需要RAM,则会减少内存中的缓存。另请参阅https://www.linuxatemyram.com/

运行Squid的计算机可能会显示异常数量的磁盘I / O缓存,因为Squid缓存包含大量文件并随机访问它们

Squid增长没有限制

您可能只是将cache_mem参数设置得太高。请参阅如何减少Squid的内存使用量?下面。

当进程的大小持续增长而又不趋于平稳或变慢时,通常表示内存泄漏。内存泄漏是指使用了一些内存块,但使用完毕后没有释放。

对于程序(如Squid)而言,内存泄漏是一个真正的问题,因为它们在一个进程中完成所有处理。从历史上看,Squid确实存在内存泄漏问题。但是随着软件的成熟,我们相信几乎所有Squid的内存泄漏都已消除,并且最不容易发现新的内存泄漏。

系统库(例如libc.a甚至libmalloc.a)中也可能存在内存泄漏。如果您遇到不断增长的进程大小现象,建议您首先尝试

我设置cache_mem为XX,但是squid进程所使用的大小超过了它

cache_mem参数指定进程的最大尺寸。它仅指定用于缓存“热门”(非常流行)对象的内存量。Squid的实际内存使用量在很大程度上取决于您的cache_dir大小(磁盘空间)和传入请求负载。减少cache_mem通常也会减少进程的大小,但不是必须的,还有其他方法可以减少Squid的内存使用

另请参阅Squid服务器中需要多少内存?

如何从缓存管理器输出中分析内存使用情况?

查看您的cachemgr.cgi 缓存信息页面

Memory usage for squid via mallinfo():
       Total space in arena:   94687 KB
       Ordinary blocks:        32019 KB 210034 blks
       Small blocks:           44364 KB 569500 blks
       Holding blocks:             0 KB   5695 blks
       Free Small blocks:       6650 KB
       Free Ordinary blocks:   11652 KB
       Total in use:           76384 KB 81%
       Total free:             18302 KB 19%
​
Meta Data:
StoreEntry                246043 x 64 bytes =  15377 KB
IPCacheEntry              971 x   88 bytes  =     83 KB
Hash link                 2 x   24 bytes    =      0 KB
URL strings                                 =  11422 KB
Pool MemObject structures 514 x  144 bytes  =     72 KB (    70 free)
Pool for Request structur 516 x 4380 bytes  =   2207 KB (  2121 free)
Pool for in-memory object 6200 x 4096 bytes =  24800 KB ( 22888 free)
Pool for disk I/O         242 x 8192 bytes =   1936 KB (  1888 free)
Miscellaneous                              =   2600 KB
total Accounted                            =  58499 KB

fork:(12)无法分配内存

解决此问题的最佳方法是通过添加交换空间来增加虚拟内存。通常,您的系统使用原始磁盘分区作为交换空间,但是大多数操作系统也支持常规文件的交换(Digital Unix除外)。有关swapswaponmkfile的信息,请参见系统手册。另外,您可以使用sleep_after_fork指令在调用辅助程序时使Squid稍微睡眠一下,以允许该辅助程序在尝试启动下一个之前启动。如果您发现Squid有时无法在“ squid -k reconfigure”上重新启动所有帮助程序,则这将很有帮助。

如何减少Squid的内存使用量?

如果由于内存限制而使高速缓存性能下降,则可以考虑购买更多的内存。但是,如果这不是一种选择,那么可以尝试以下方法:

  • 尝试使用其他malloc库(请参见下文)

  • 减少配置文件中的cache_mem参数。这可以控制在内存中保留多少“热”对象。减少此参数不会显着影响性能,但是如果您的缓存繁忙,您可能会在cache.log中收到一些警告。

  • 关闭memory_pools关在配置文件中。这导致Squid通过调用free()放弃未使用的内存,而不是保留该块以备将来使用。一般来说,这是一个坏主意,因为它会导致堆碎片。请改用 memory_pools_limit

  • 减少配置文件中的cache_swap_lowcache_dir参数。这将减少Squid保留的对象数量。您的总体命中率可能会下降一点,但是缓存的性能会明显更好。

使用备用的malloc库

 

将Squid与外部malloc库链接时,许多用户发现性能和内存利用率得到了提高。我们建议使用GNU malloc或dlmalloc。

我的Squid服务器需要多少内存?

 

根据经验,Squid每GB的所有cache_dirs总数大约使用10 MB的RAM(在64位服务器(例如Alpha)上更多),再加上cache_mem设置以及大约10-20MB。建议您的Squid服务器上至少有两倍于此数量的物理RAM。有关Squid的内存使用情况的详细讨论,请参见以上各节。

除了Squid所使用的内存外,操作系统还建议使用建议的额外RAM,以提高磁盘I / O性能以及服务器上运行的其他应用程序或服务。即使将Squid作为唯一的tcp服务运行的服务器也是如此,因为进程管理,日志记录和其他OS级别例程需要的内存最低级别。

如果您的服务器内存不足且磁盘很大,那么您将不一定能够使用所有磁盘空间,因为当缓存填满时,可用内存将不足,从而迫使Squid换出内存并影响性能。很大的cache_dir总数以及不足的物理RAM +交换可能会导致Squid完全停止运行。更大的缓存的解决方案是获得更多的物理RAM。通过cache_mem向Squid分配更多资源将无济于事。

 

为什么我的Squid过程无法增长到一定大小?

 

由[ AdrianChadd Adrian Chadd]

许多人运行的Squid内存超过1GB。这里有一些事情要记住。

  • 操作系统可能会限制每个进程可用的内存量。检查资源限制(/ PAM系统下的/etc/security/limits.conf或类似内容,“ ulimit”等)

  • 操作系统可能会限制进程的大小。有时将32位平台“拆分”为2gb进程/ 2gb内核;可以通过内核重新编译或引导时选项将其更改为3gb进程/ 1gb内核。有关详细信息,请查阅操作系统的文档。

  • 某些malloc实现可能不支持> 2gb的内存-例如dlmalloc。除非您的平台严重损坏,否则请不要使用dlmalloc(然后您将意识到使用它不能使用> 2gb RAM)。

  • 确保将Squid编译为64位二进制文件(对于现代的类Unix操作系统,您可以使用'file'命令来实现);一些平台可能具有64位内核但具有32位用户区,或者编译器可能默认为32位用户区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值