精华内容
下载资源
问答
  • 自己查阅了一些资料,也基于zabbix的可用内存和实际不一样入手去找原因发现问题出现于Cached的值过,导致系统没有可以再分配的内存空间。Cached只要用来缓存文件的,经常读写的文件会被缓存到Cached中,可以...

    问题描述

    Linux服务器SAP-HANA经常系统内存不足使得SAP应用不能使用解决方案。
    Linux内存使用量过高,使得sap应用程序无可用内存,最终导致程序崩溃。

    问题原因

    自己查阅了一些资料,也基于zabbix的可用内存和实际不太一样入手去找原因发现问题出现于Cached的值过大,导致系统没有可以再分配的内存空间。Cached只要用来缓存文件的,经常读写的文件会被缓存到Cached中,可以增加读写效率,该功能是Linux系统内核提供的,而SAP-HANA的日志文件很大过一段时间基本都是好几百G。这就可以解释SAP项目总是过一段时间就挂掉了,SAP处理的数据量很大,所以接收和下载的文件会被缓存起来,一直耗着内存不释放,即使把程序停掉也不会释放内存。
    1.SAP发生问题时内存的使用情况
    在这里插入图片描述
    可以看到cached很大,达到了200多G
    重启之后的HANA内存使用情况,很明显cached的值降到7G多,这也是为什么重启之后问题貌似解决了,但是多了一段时间之后却还是会出现新的问题。
    在这里插入图片描述
    在这里插入图片描述

    可以看到按照此公式计算可用内存为200多G,这也正是zabbix所监控到的数据,是没有问题的。所以问题就在于还有可用内存但是我们却不能用,原因就在于Cached的值过大,导致系统没有可以再分配的内存空间。
    这也是为什么zabbix报警swap分区使用过高的原因,由于缓存空间(Cached)有限,在很紧张时会使用swap的空间。
    问题解决办法
    最后找到了三条执行,可以清理cached的内存。
    三条指令:
    sync
    echo 1 > /proc/sys/vm/drop_caches
    echo 2 > /proc/sys/vm/drop_caches
    echo 3 > /proc/sys/vm/drop_caches
    执行完这三条指令后通过free -m命令查看,free可用内存马上增多,buff/cache列值变小,说明内存被释放了,但是不能总是手动的执行这三条指令,所以具体工作中要写一个shell脚本,开启Linux定时任务crond,每天早上检查一次free内存,当小于一定的值时执行这三条命令。具体我这边在写,具体后面可以在观察,有问题请联系我。
    注意:在执行这三条命令之前一定要先执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-Node、已延迟的块 I/O 和读写映射文件)

    解决方案(手动)

    1. 修改/proc/sys/vm/drop_caches,释放Slab占用的cache内存空间(参考drop_caches的官方文档):
      在这里插入图片描述
      注意:在执行这三条命令前先执行sync命令
      解决方案(自动)
      1、编写shell定时任务脚本freemem.sh
      #! /bin/sh
      used=free -m | awk 'NR==2' | awk '{print $3}'
      free=free -m | awk 'NR==2' | awk '{print $4}'
      echo “===========================” >> /app/memory/logs/mem.log
      date >> /app/memory/logs/mem.log
      echo “Memory usage before | [Use:usedMB][Free{used}MB][Free:{free}MB]” >> /app/memory/logs/mem.log
      if [ $free -le 4000 ] ; then
      sync && echo 1 > /proc/sys/vm/drop_caches
      sync && echo 2 > /proc/sys/vm/drop_caches
      sync && echo 3 > /proc/sys/vm/drop_caches
      used_ok=free -m | awk 'NR==2' | awk '{print $3}'
      free_ok=free -m | awk 'NR==2' | awk '{print $4}'
      echo “Memory usage after | [Use:usedokMB][Free{used_ok}MB][Free:{free_ok}MB]” >> /app/memory/logs/mem.log
      echo “OK” >> /app/memory/logs/mem.log
      else
      echo “Not required” >> /app/memory/logs/mem.log
      fi
      exit 1
      2、使用crontab -e命令编辑当前用户的crontab

    0 6 * * * /usr/local/tomcat/sztFileFront/bin/freemem.sh
    定时任务编写参考:http://www.jb51.net/article/15008.htm

    3、重启crond服务

    /sbin/service crond restart

    4、查看crond服务是否重启成功

    /sbin/service crond status

    最后,问题解决。我设定的定时任务是每天早上6点执行一次freemem.sh脚本。
    在这里插入图片描述

    展开全文
  • 在云上跑了一个深度学习的东西,但是数据量实在太大,为了加速。 我就直接将数据集全部加载到内存中,毕竟对于GPU云服务器来说,内存和GPU比起来实在不算钱。。。 但是运行top指令发现,linux中的buff/cache占比...

    在云上跑了一个深度学习的东西,但是数据量实在太大,为了加速。 
    我就直接将数据集全部加载到内存中,毕竟对于GPU云服务器来说,内存和GPU比起来实在不算钱。。。

    但是运行top指令发现,linux中的buff/cache占比相当大,但没发现占用这个的程序,于是决定手动释放掉,以使得我的数据集都能完美的加载到内存中去。

    清空buff./cache代码:

    # echo 3 > /proc/sys/vm/drop_caches


    这样就能继续愉快的加载数据集了=。=
    --------------------- 
    作者:Shwan_Ma 
    来源:CSDN 
    原文:https://blog.csdn.net/shwan_ma/article/details/78785773 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • Cache架构设计

    2019-04-03 15:52:00
    如果访问量小,定时过期会造成Cache命中率低,如果实时性要求高,过期间隔小,Cache的意义就不大 适用情况 : 实时性低 全量刷新策略 全量刷新的好处是Cache命中率高,Cache实时性高 全量数据相比那些Cache key值...

    Cache策略

    • 定时过期策略
      1. 定时过期的好处是Cache节点的个数符合实际需求,不会造成资源滥用和服务器压力
      2. 定时过期适合访问量较大,实时性要求不高的情况
      3. 如果访问量小,定时过期会造成Cache命中率低,如果实时性要求高,过期间隔太小,Cache的意义就不大
      4. 适用情况 : 实时性低
    • 全量刷新策略
      1. 全量刷新的好处是Cache命中率高,Cache实时性高
      2. 全量数据相比那些Cache key值设置不好的非全量Cache,可能反而更小
      3. 全量刷新的弊端是有可能造成服务器的压力,如果数据使用率低,就是对资源的滥用
      4. 全量刷新适合数据量小或者数据使用率高的应用
      5. 适用情况 : 数据量小
    • 定时刷新策略
      1. 定时刷新的Cache节点个数和Cache大小成正比,需要综合考虑Cache命中率和数据量设定节点个数
      2. 节点数过大会造成Cache庞大,过小会造成命中率低
      3. 定时刷新的频率和实时性成正比
      4. 定时刷新对服务器资源有一定的滥用
      5. 需要开发人员了解具体服务的访问量数据量,制定合适的节点个数与刷新频率
      6. 使用情况 : 其他策略无法满足
    • 定时过期+磁盘持久化策略
      1. 过期Cache存磁盘文件,系统下线所有cache持久化
      2. 分布式Cache机制,互相备份,错开重启
      3. 可以在一定条件下舍弃数据库
    • Cache与访问量,数据量,定时性的关系
      1. 访问量大,数据量大,实时性高,可以使用复杂的定时刷新,还需要根据实际情况做优化
      2. 访问量小,数据量大,实时性高,可以使用定时刷新或不用Cache
      3. 数据量小,实时性高,可以使用全量刷新
      4. 访问量大,数据量大,实时性低,可以使用定时过期
      5. 访问量小,数据量大,实时性低,可以使用定时过期或者定时刷新

    智能Cache策略

    • UserPreference cache
    • Subscription cache
    • 分时间段的Cache,某些时间段的某些cache不过期,需要通过分析流量制定时间段

    穿透优化

    • 缓存穿透
      1. 发生大量不存在的key的访问,会加重对数据库层的压力
    • 优化方法
      1. 缓存空对象key:null
        1. 空对象使用一个比较短的过期时间
        2. 用主动刷新策略应对key又被存入数据库的情况
        3. 实现成本低,占用内存不可控(由非法key和合法key的比例决定)
      2. 布隆过滤器拦截
        1. BloomFilter缓存所有存在的key,进行第一层过滤
        2. 会降低缓存的性能,实现成本高,占用内存可控
      3. 不使用传统的低性能的数据库

    无底洞优化

    • 无底洞现象
      1. 分布式存储随着节点数的增加以及key的随机分布,批量操作的网络传输次数怎加造成性能不增反减
    • 优化方法
      1. 串行IO
        1. 先将批量查询的key所在的节点做mapping
        2. 属于相同节点的key合并一组,循环的所有组进行查询
      2. 并行IO
        1. 对串行IO作多线程处理
      3. hash tag
        1. 将相同hash tag的数据存储在同一个节点
        2. 一次批量查询只操作相同hash tag的key
        3. 容易产生数据分布不均衡

    缓存重建优化

    • 问题
      1. 高并发的热点key+数据对象大重建缓慢
      2. 数据过期等情况造成大量线程来重建缓存,使得服务崩溃
    • 优化方法
      1. 永不过期或者timeToIdle+主动更新
      2. 互斥锁:Redis可以用setnx实现
      3. 用户请求不重建缓存,用单独线程合并用户请求重建缓存

    热点key集中化优化

    其他等待解决疑问

    • Server resource的个数大小如何定
    • resourcePool的个数与大小
    • Manage the CacheManager/Cahce/Entity
    • load balance
    • Thread Pools线程池
    • key生成策略

    CacheManager/Cache等实例数量与大小的考虑

    • server resource & resource pool
      1. server resource可以多设置几个,比如每个1-5G这样,设置5个备用,每个可以给一个CacheManager使用
      2. 一个server resource里可以设置一个或多个resourcePool用于clusteredShared,一个或多个resourcePool用于clusteredDedicated,这个要根据实际需求
      3. 一旦clusted端建立了CacheManager,此CacheManager所占用的resourcePool就会被分配给这个CacheManager,所以resourcePool的大小应该更具项目实际情况设置,以免造成资源浪费
      4. 一个pool满了,就使用下一个,而不是增加它的大小,不然会影响所有使用者
      5. 也可以使得pool的大小动态获取,而不是hard code
    • CacheManager
      1. 不同的业务模块创建不同的CacheManager实例,可以保持业务模块独立性
        1. 比如说可以单独清除一个CacheManager的所有Cache
      2. 多个CacheManager,配置代码在不同项目的复用会出现问题,如何解决?
        1. 用一个项目创建CacheManager,其他项目用缺省的方式连接CacheManager
      3. 单个CacheManager和多个CacheManager的性能问题?多个CacheManager真的必要么?
    • Cache
      1. 不同的业务模块创建不同的Cache实例,可以保持业务模块独立性
        1. 不同的业务模块可以使用不同的key规则
        2. 可以独立的管理cache,比如删除等操作
        3. 可以更合理的定制Cache大小,提高cache命中率
        4. 可以更合理的定制Expiry
      2. 通过不同的Expiry策略创建不同的Cache实例
        1. 方便开发,无须每次都创建新的cache
      3. clusteredDedicated
        1. 必须指定cache的大小,不适合producer/consumer的方式,因为consumer必须知道producer设置的大小
        2. 能够更好的更具实际需要利用内存资源
      4. clusteredShared
        1. 不需要指定每个cache大小,方便producer/consumer主从互换
        2. Shared pool的大小必须足够大,而且基本不变,才能方便使用,这样便会造成内存的浪费
        3. Shared pool的变化会造成所有producer/consumer的配置要变
      5. clustered继承
        1. 解决了clusteredDedicated的问题
        2. 但是如果有两个以上的producer或者spring cache那样自己也是producer,还是必须统一配置
    • 不方便的地方
      1. spring cache无须手动create cache,但是ehcache clustered必须手动,因为每个cache的配置更灵活
      2. withCache/createCache创建新cache,必须用autoCreate,在原来的CacheManager实例里创建新的cache并且连接
    • 动态cache配置机制
    • 多个Cache不同项目的配置
      1. 配置服务化[不推荐]
        1. 将配置信息封装成配置对象
        2. service提供获取配置对象服务
        3. 造成client项目依赖service或者cache项目
      2. 主从互换
        1. service与client都去判断cluster端是否存在cache,如果不存在,那么创建,否则继承
        2. 造成cache manage也无法继承
        3. 无法保证service与client创建cache时使用相同配置
        4. 适合clusteredShared
        5. 不适合clusteredDedicated的原因是client必须知道service端设置的大小
        6. 如果有两个以上的producer,也不适合clustered继承
      3. 完美主从互换[跨项目组的情况下建议使用]
        1. 方法1: service提供Cache配置服务,client获取配置创建cache,配置服务使得service必须有服务提供
        2. 方法2: common jar的形式保证创建cache时使用相同配置
        3. 方法3: service方提供client代码,client利用client代码创建cache
        4. 保证service与client创建cache时使用相同配置
        5. service必须知道自己的cache的配置,无法使用动态cache配置机制
        6. 需要动态cache配置的时候只适合clusteredShared,否则可以使用clusteredDedicated
        7. 这个工作需要额外开发,很麻烦啊,两害取其轻,还是使用clusteredShared+动态pool size吧,一点点浪费总比不可控也增加开发/维护难度好
      4. service主导[不推荐]
        1. client判断cluster端是否存在cache,如果不存在,那么创建,否则继承
        2. service判断cluster端配置是否符合自己要求,如何不符合,删除cache重新创建,否则直接创建
        3. 但是必须所有cache manager close()
        4. 适合clusteredDedicated

    转载于:https://www.cnblogs.com/judesheng/p/10649391.html

    展开全文
  • L1 L2 L3 cache

    2015-10-27 10:22:37
    内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般服务器CPU的L1缓存的容量通常在32—...
    L1Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般服务器CPU的L1缓存的容量通常在32—256KB。 

    L2Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。L2高速缓存容量也会影响CPU的性能,原则是越大越好,现在家庭用CPU容量最大的是512KB,而服务器和工作站上用CPU的L2高速缓存更高达256-1MB,有的高达2MB或者3MB。 

    L3Cache(三级缓存),分为两种,早期的是外置,现在的都是内置的。而它的实际作用即是,L3缓存的应用可以进一步降低内存延迟,同时提升大数据量计算时处理器的性能。降低内存延迟和提升大数据量计算能力对游戏都很有帮助。而在服务器领域增加L3缓存在性能方面仍然有显著的提升。比方具有较大L3缓存的配置利用物理内存会更有效,故它比较慢的磁盘I/O子系统可以处理更多的数据请求。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器队列长度。 

    其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制造工艺,并没有被集成进芯片内部,而是集成在主板上。在只能够和系统总线频率同步的L3缓存同主内存其实差不了多少。后来使用L3缓存的是英特尔为服务器市场所推出的Itanium处理器。接着就是P4EE和至强MP。Intel还打算推出一款9MB L3缓存的Itanium2处理器,和以后24MB L3缓存的双核心Itanium2处理器。

    但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的Xeon MP处理器却仍然不是Opteron的对手,由此可见前端总线的增加,要比缓存增加带来更有效的性能提升。
    展开全文
  • 公司的图片服务器一直以来负载都比较高,原因是图片比较分散而且比较小。经常把iowait搞的特别的高。但是只有一台机器也法用squid,经测试squid和apache在同一台机器效果会很糟糕的。因为squid要写磁盘,Apache要读...
  • 自定义任务引擎Probius上线运行一段时间后,小伙伴跟我反馈有部分任务执行时间长,等的花儿都谢了,例如下边这个任务竟然执行了超过24分钟查看每个子任务的执行时间,发现单单消耗在“YARN安装模块”这个子任务的...
  • 转载自:http://www.cnblogs.com/_franky/archive/2011/11/23/2260109.html  说明:本帖主要针对各个环节的缓存代理,以及本地用户代理(浏览器)上的缓存策略...代理服务器简分类:(并不全,仅当科普, 了解代理在w...
  • 【linux】buff/cache手动释放

    万次阅读 2017-12-20 10:27:07
    在云上跑了一个深度学习的东西,但是数据量实在太大,为了加速。 我就直接将数据集全部加载到内存中,毕竟对于GPU云服务器来说,内存和GPU比起来实在不算钱。。。但是运行top指令发现,linux中的buff/cache占比相当...
  • crond实现Squid定时清理Cache

    千次阅读 2006-11-21 15:34:00
    用squid做代理服务器,当cache太大时,就挂了,于是想通过crond自动清理缓存。OS: RedHat 9.0 Linux FILE1: /home/bsmagic/projects/Squid_crond/rcsquid.sh#!/bin/sh/etc/rc.d/init.d/squid -k kill /usr/local/...
  • ASP.NET中CaChe缓存

    2013-12-27 11:35:00
    页面输出缓存作为最简单的缓存形式,将已经生成的动/静 页面全部内容保存在服务器内容中。当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期。在这个过程中,缓存不再要再次经过页面处理生命周 期...
  • 摘要: 本文讲的是java中利用spring cache解耦业务中的缓存, 虽然以前实现缓存的方式,是定义了缓存操作接口,可以灵活实现不同的缓存,可毕竟精力有限,要完成不同的缓存实现也是件麻烦的事。更要命的是,业务...
  • 昨天换了Win10的新机器, 总体没有什么变化,开始 栏有点不习惯。在打开远程服务器文件夹的时候,在记住此用户名密码处打了勾,结果出了问题了。。。在访问那个服务器的时候,不管是文件夹还是网站都被固定成...
  • Squid 服务器日志增长是很快的,如果不做处理的话,可以会由于系统限制单文件大小,而导致 Squid 服务停止,太大的日志文件也不适合分析。 一、日志配置 shell > grep 'log' /etc/squid/squid.conf cache...
  • 缓存系列之一:buffer、cache与浏览器缓存 一:缓存是为了调节速度不一致的两个或...而且硬盘也有大小不一的缓存,甚至是物理服务器的raid 卡有也缓存,都是为了起到加速CPU 访问硬盘数据的目的,因为CPU的速度快...
  • 很久以前在国外服务器上挖了个坑,说nginx的fastcgi_cache是被大家忽视的一金矿,今天把这个坑填上,顺祝大家新年快乐。  对于变化不频繁的数据,大家都比较喜欢存Memcached以减少数据库的读取,但还是会有...
  • 但有时候网站的服务器端的确需要进行大量计算,导致客户端发送请求后过了很久响应返回,对于用户很可能就是看到一个空白的页面在加载,这样用户体验就差了。目前已经有很多方法来提升 Web 服务的响应速度。这里...
  • 其实数据库服务器、应用程序服务器都有缓存。那么我们所设计的缓存应该是针对系统的。楼上的一些方法都不可取。这里,我提供一些我的思路吧。 系统需要缓存表现在两个方面,第一、频繁的数据库查询访问,而内容又...
  • /proc/meminfo 文件包含了更多更原始的信息,只是看起来不直观。 2、为什么要使用free命令?和top,ps命令相比,有什么内存显示优点? 了解top命令详情点击这里 了解top、ps详情点击这里 系统管理员必须维护他们...
  • 【导读】与朋友或同事谈到mysql查询缓存功能的时候,个人喜欢把Query Cache比作荔枝,是非常营养的东西,但是一次性吃多了,就容易导致上火而流鼻血,虽然不是特别恰当的比喻,但是有很多相似的地方,另外Query...
  • 本书在并发处理上也花费了相当的篇幅,描述了并发线程以及相关的创建线程的操作系统函数。本书给出了能说明每个设计思想的实现方法,讨论了包括应用层网关和管道在内的各种技术,回顾了几个标准应用协议,并使用...
  • 以前不会这样问题,代码应该没问题的... <strong>问题补充</strong><br/>刚开启了一个网站的访问日志,一开启jboss服务器,那个访问网站日志文件一下子就变得很,不知为什么那些IP全部访问情感新闻文件下的...
  • 发现当上传的视频文件太大的时候会使服务器内存的buf/cache占用很高(好几个G),虽然可以手动清除,但是依旧无法从根源上解决视频上传内存占用太大的问题。 解决问题的思路 lz花了100积分在csdn上面提的问题:...
  • 规模网站架构缓存

    2014-10-23 16:47:09
    一、前端Cache机制 1. 域名转为IP地址(域名服务器DNS缓存) 我们知道域名其实只是一个别名,真实的服务器请求地址,实际上是一个IP地址。获得IP地址的方式,就是查询DNS映射表。虽然这是一个非常简单的查询,...
  • 考虑到恢复和磁盘加载到内存的速度,单个...虽然TimesTen有Cache Grid即Global Cache Group的概念,但由于其还不成熟,一般采用手工分区的方式,即通过应用服务器定向到指定的TimesTen的方式。以下给出了只读和读写数
  • squid反向代理

    2017-06-19 15:05:36
    squid反向代理过程其实和前面的正向代理没有什么太大区别,唯一的区别是配置文件中一个地方需要改动一下。需要把:http_port 3128改为:http_port 80 accel vhost vport然后再增加你要代理的后端真实服务器信息:cache_...
  • Simon最近为公司服务器操碎了心 , 先是mysqld进程占用CPU过高 , 导致服务器性能变低 ,网站打开慢.通过增加max_connections及table_cache解决了问题 ,随后发现memcache的CPU占用一直在50%左右 , 这种情况可不正常. ...
  • 现在改变方案,不打算把访问量入库(因为数据量太大,是在太慢了)。新方案:把cache服务器中的访问量放入isearch的xml。 数据源1:萝卜cache服务器的数据,格式:key(MD5,city_storeId)+访问量 数据源2:店铺...
  • 2.2-squid反向代理

    2015-09-19 22:08:49
    反向代理配置过程其实和前面的正向代理没有什么太大区别, 唯一的区别是配置文件中一个地方需要改动一下。需要把:http_port 3128改为:http_port 80 accel vhost vport然后再增加你要代理的后端真实服务器信息:cache_...

空空如也

空空如也

1 2 3 4 5 6
收藏数 120
精华内容 48
关键字:

服务器cache太大