清漆过程未关闭并占用大量内存

时间:2016-11-29 11:42:13

标签: linux varnish

我们在centos服务器中使用Varnish缓存4.1,当我们启动Varnish服务器大量的清漆流程启动并且没有关闭时,由于这个问题我们面临内存泄漏问题,请告诉我们如何解决它

我的配置是:/ etc / sysconfig / varnish

CREATE TABLE #table(RefId INT IDENTITY(1,1) ,Id INT,Name VARCHAR(100),LName   
VARCHAR(100),Cat VARCHAR(100),Price INT,Code VARCHAR(100),Dis INT      
DEFAULT(0),SAl INT DEFAULT(0),LSal INT DEFAULT(0))
INSERT INTO #table(Id ,Name ,LName ,Cat ,Price ,Code ,Dis ,SAl ,LSal)
SELECT 3289,'The Butterfly Tree','Stitched','Shirts - Without     
Embroidery',2600    ,'BGD'  ,34 ,0  ,0  UNION ALL
SELECT 3289,'The Butterfly Tree','Stitched','Shirts - Without    
Embroidery',2600    ,'CGD'  ,0  ,0  ,0  UNION ALL
SELECT 3289,'The Butterfly Tree','Stitched','Shirts - Without  
Embroidery',2600    ,'DMC'  ,184    ,35 ,9  UNION ALL
SELECT 3289,'The Butterfly Tree','Stitched','Shirts - Without 
Embroidery',2600    ,'DOL'  ,187    ,24 ,6  UNION ALL
SELECT 3289,'The Butterfly Tree','Stitched','Shirts - Without 
Embroidery',2600    ,'GUL'  ,242    ,73 ,23

;WITH CTE AS
(  
  SELECT Id , CAST(Dis AS VARCHAR) + ',' +  CAST(SAl AS VARCHAR)+ ',' +     
  CAST(LSal AS VARCHAR) AS Comb
  FROM #table
)
SELECT DISTINCT Id , Name ,LName ,Cat ,Price,STUFF( ( SELECT ',' + Comb FROM    
CTE WHERE #table.Id = CTE.Id FOR XML PATH('')),1,1,' ')  
FROM #table

34514 89208 83360 5 0.0 4.3 0:00.00 / usr / sbin / varnishd -a:80 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -p thread pool min = 50 - pt 1678清漆20 0 345M 89208 83360 S 0.0 4.3 0:00.03 / usr / sbin / varnishd -a:80 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -p thread_pool_min = 50 - p•1679清漆20 0

1 个答案:

答案 0 :(得分:0)

您不限制瞬态对象的空间。默认情况下,使用无限制的malloc(请参阅官方文档:https://www.varnish-cache.org/docs/4.0/users-guide/storage-backends.html#transient-storage

根据我在您的消息中看到的内容,您没有使用参数DAEMON_OPT。 你的varnishd.service文件和/etc/varnish/varnish.params有什么内容?

修改

你的init.d脚本没什么问题。它应该使用/etc/sysconfig/varnish.中的设置 清漆消耗了多少RAM? 所有清漆线程共享相同的存储(malloc 2G + Transient malloc 100M),因此存储时最多需要2.1G。您需要为缓存中存储的每个对象添加1KB的平均开销,以获得所使用的总内存。 我不认为你遭受内存泄漏,这个过程很正常。你告诉varnish产生了50个进程(带有thread_pools参数)所以它们是预期的。

我建议减少thread_pools的数量,你将它设置为50.你应该可以将它减少到2到8之间,同时它将有助于增加{thread_pool_max 1}}到5000并将thread_pool_min设置为1000。 我们正在运行非常大的服务器,有2个池* 1000-5000个线程,没有问题。