精华内容
下载资源
问答
  • Memcached介绍基于对ERP项目思考,我看看了关于缓存方面东西。在所有缓存方案中,Memcached是最让我有兴趣。看看Memcached项目有关背景:memcached is a high-performance, distributed memory object ...
    Memcached介绍
    基于对ERP项目的思考,我看看了关于缓存方面的东西。在所有的缓存方案中,Memcached是最让我有兴趣的。看看Memcached项目
    的有关背景:
    memcached is a high-performance, distributed memory object caching system, generic in nature, but intended
    for use in speeding up dynamic web applications by alleviating database load.
    Danga Interactive developed memcached to enhance the speed of LiveJournal.com,
    a site which was already doing 20 million+ dynamic page views per day for 1 million users with a
    bunch of webservers and a bunch of database servers. memcached dropped the database load to almost nothing,
    yielding faster page load times for users, better resource utilization, and faster access to the databases
    on a memcache miss.

    不翻译了,只强调几个keywords:
    high-performance,distributed memory
    LiveJournal.com----------因为这个百万级的网站的需求而产生的。

    1.high-performance
    在官方wiki上有这么一句:
    Very fast. It uses libevent to scale to any number of open connections (using epoll on Linux,
    if available at runtime), uses non-blocking network I/O, refcounts internal objects (so objects
    can be in multiple states to multiple clients), and uses its own slab allocator and hash table so
    virtual memory never gets externally fragmented and allocations are guaranteed O(1).
    使用libevent,它可以应对任意多个连接,使用非阻塞的网络IO.
    由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。
    由于是对HashTable的遍历,所以其查询复杂度是O(1)。
    至于其中提到的libevent,呵呵,还没有看:)

    2.distributed memory:分布式的内存管理,这正式它的优势所在。Memcached Client API 屏蔽了对象在不同内存区域的差别,
    以一致的接口方法,所以用起来你完全感觉不到在使用不同的内存对象,当然缓存的时候也感觉不到。
    这也是系统水平扩展的一个要点。理论上内存可以无限扩展,只要平行增加server节点就可以。

    3.和数据库缓存的比较:
      不考虑使用什么样的数据库(MS-SQL, Oracle, Postgres, MysQL-InnoDB, etc..),
      实现事务(ACID,Atomicity, Consistency, Isolation, and Durability )需要大量开销,
      特别当使用到硬盘的时候,意味着查询可能会阻塞。当使用不包含事务的数据库(例如Mysql-MyISAM),上面的开销不存在,但读线程又可能会被写线程阻塞。
      可以看出,用数据库做缓存,在很大程度上是不明智的。
    4. 和共享内存的比较:
       最初的缓存做法是在线程内对对象进行缓存,但这样进程间就无法共享缓存,命中率非常低,导致缓存效率极低。
       后来出现了共享内存的缓存,多个进程或者线程共享同一块缓存,但毕竟还是只能局限在一台机器上,多台机器做相
       同的缓存同样是一种资源的浪费,而且命中率也比较低。   Memcached Server和Clients共同工作,实现跨服务器
       分布式的全局的缓存。并且可以与Web Server共同工作,Web Server对CPU要求高,对内存要求低,
       Memcached Server对CPU要求低,对内存要求高,所以可以搭配使用。

    5. 缓存对象同步管理:
       Memcached是遵循LRU(Least Recently Used:最近最少被使用)原则。当然你也可以设置缓存对象的生命周期。

    6.Memcached的使用(Win32,.Net)
      具体下载安装过程:http://jehiah.cz/projects/memcached-win32/
      在win32下,memcached就是一个windows service。你可以在windows服务中找到:memcached Server 。这个就是了。
      发现这玩意比较消耗内存。
       
      .Net中使用:
      引用Memcached.ClientLibrary.dll,主要使用其中的几个类:

       Memcached.ClientLibrary.SockIOPool pool = Memcached.ClientLibrary.SockIOPool.GetInstance(); ---服务器管理对象
       MemcachedClient mc = new MemcachedClient(); ---客户端

    比较感兴趣这个GetInstance方法,具体看看:
     1            // empty constructor
     2         protected SockIOPool() { }
     3 
     4         /// <summary>
     5         /// Factory to create/retrieve new pools given a unique poolName.
     6         /// </summary>
     7         /// <param name="poolName">unique name of the pool</param>
     8         /// <returns>instance of SockIOPool</returns>
     9         [MethodImpl(MethodImplOptions.Synchronized)]
    10         public static SockIOPool GetInstance(String poolName)
    11         {
    12             if(Pools.ContainsKey(poolName))
    13                 return (SockIOPool)Pools[poolName];
    14 
    15             SockIOPool pool = new SockIOPool();
    16             Pools[poolName] = pool;
    17 
    18             return pool;
    19         }
    20 
    21         /// <summary>
    22         /// Single argument version of factory used for back compat.
    23         /// Simply creates a pool named "default". 
    24         /// </summary>
    25         /// <returns>instance of SockIOPool</returns>
    26         [MethodImpl(MethodImplOptions.Synchronized)]
    27         public static SockIOPool GetInstance()
    28         {
    29             return GetInstance(GetLocalizedString("default instance"));
    30         }
            string[] serverlist = { "192.168.100.142:11211" };
            pool.SetServers(serverlist);
            pool.InitConnections = 3;
            pool.MinConnections = 3;
            pool.MaxConnections = 5;
    上面的代码,可以看到server的配置还是很强的。至于利用client api开发则是相当简单。自带的MemCachedBench_2.0项目就是相当好的一个demo。

    有空翻译下:http://www.linuxjournal.com/article/7451 

    转载于:https://www.cnblogs.com/flyingchen/archive/2007/07/24/829745.html

    展开全文
  • ④修正了大字体环境下运行背景图错位问题Beta 6 - ①修正某些情况加载数据库出现“Out of memory”错误;②修正从没有数据库或者数据库损坏情况下在线更新到新数据库后界面不自动刷新问题;③微调了检测...
  • 技术分享部分(鸿洋玩Android,还有代码家干活集中营等等),关于flutter版本极致体验玩Android客户端 玩Android,鸿洋大神开放接口, 首页轮播图+list:推荐最新博客 知识体系:对安卓知识体系做整理 登录...
  • 4.12.5 Database Control简要介绍 112 4.12.6 Performance 113 4.12.7 Availability 114 4.12.8 Server 114 4.12.9 Schema 115 4.12.10 Data Movement 115 4.12.11 Software and Support 115 4.12....
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 更多关于HUGO安装内容可以参考HUGO 官方文档 安装完成后可以通过 hugo version 确认是否安装成功 ➜ ~ hugo version Hugo Static Site Generator v0.78.0-FD62817B/extended darwin/amd64 BuildDate: 2020-11-03...
  • 英特尔面试专项准备

    2020-12-09 13:46:46
    关于memory barrier问题,内核中各种屏障(这个我答得不好,因为我现在仍然不明白这些) </li><li> <p>smp中总线监听协议,保证同步方法 </li><li> <p>numa是啥 </li><li> ...
  • goodsize 1024 Amount of usable physical memory in Mbytes False //命令中Machine/Cabinet Serial NO项即是 # lscfg -pvl sysplanar0 | grep "Machine/Cabinet" ##bootinfo命令start //若此命令返回值是1, ...
  • 测试培训教材

    2014-04-01 12:10:48
    You can also view the system information that has been retrieved—such as CPU, memory, and processes running on the machine—and an image of the machine executing the system test. 6、测试用例设计、...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    Android Android Android Android 开发背景 � 计算技术、无线接入技术发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行移动发展战略:通过与全球各地手机制造商和移动运营商...
  • OOM问题解决

    2021-02-09 14:40:01
    介绍关于MongoDB内存占用可以参考这篇文章: https://zhuanlan.zhihu.com/p/54547887 主要分为为连接开辟资源,和放在内存中数据。MongoDB使用是内存映射存储引擎,即Memory Mapped Storage Engine,简称...

    OOM问题解决

    MongoDB OOM问题解决

    背景:最近需要对海量历史数据进行离线化计算,数据源为HBase,因为历史数据并未进行HBase和数仓双写。无奈只能暴力拉去HBase数据存储到本地的MongoDB中。

    介绍:关于MongoDB的内存占用可以参考这篇文章: https://zhuanlan.zhihu.com/p/54547887
    主要分为为连接开辟的资源,和放在内存中的数据。MongoDB使用的是内存映射存储引擎,即Memory Mapped Storage Engine,简称MMAP。MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,这样文件中的信息位置就会在内存中有对应的地址空间,这时对文件的读写可以直接用指针来做,而不需要read/write函数了,但这并不代表将文件map到物理内存,只有访问到这块数据时才会被操作系统以Page的方式换到物理内存。MongoDB将内存管理工作交给操作系统的虚拟内存管理器来完成,这样就大大简化了MongoDB的工作,同时操作系统会将数据刷新保存到磁盘上。

    问题:OOM即Out of Memory。unix内核会对进程进行管理,发现占用内存过大或者占用内存持续增长的进程会自动杀死。之前疑惑了很久为啥存到MongoDB中的数据量和实际数据量不太一致,后来才发现原来是程序跑到一半,MongoDB Server已经被干掉了。显示“已杀死”字样。因为多线程拉去HBase的数据并高并发写入MongoDB数据量过大,导致mongdb占用内存增加。
    解决:解决方法很简单,只需要修改etc目录下面的mongo.conf,对内存进行限制即可:

    storage:
      dbPath: /data/mongo/mongodb-linux-x86_64-rhel70-4.4.3-rc0/data
      journal:
        enabled: true
      engine: wiredTiger
      	wiredTiger:
          engineConfig:
          	cacheSizeGB: 5
    
    systemLog:
      destination: file
      logAppend: true
      path: /data/mongo/mongodb-linux-x86_64-rhel70-4.4.3-rc0/logs/mongo.log
    

    修改完之后重启mongodb服务,发现占用的内存果然被限制了。

    java程序OOM问题

    Java进程在运行时突然挂掉,常见的原因有很多,例如代码本身的致命bug、JVM自身故障、内存泄漏触发JVM的OOM机制等,但是这些原因都属于主观原因,基本可以通过查看日志来发现。

    事实上,Java进程还可能被动地结束。由于用户进程只是运行在操作系统之上的普通进程,享受着操作系统提供的资源,因此也受制于操作系统。在Linux下,就存在一个隐形的进程杀手:OOM Killer。
    以前占用了那么多内存,也有它自己不对的地方,以后必须要控制好内存占用。这不,它再次启动时,用 -Xmx 参数限制了自己能够占用的最大内存:
    java -jar -Xmx64m xxxx.jar

    后台运行程序问题

    使用&让程序后台运行,本次会话结束后程序会终止。
    使用screen会开启一个新的会话去运行程序,所以使用screen才是正道。

    参考:
    https://qzy.im/blog/2020/07/oom-killer-killed-java-process-in-linux/
    https://zhuanlan.zhihu.com/p/54547887

    展开全文

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

关于memory的背景介绍