`
carlosfu
  • 浏览: 571913 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ba8b5055-9c58-3ab0-8a1c-e710f0495d2c
BigMemory实战与理...
浏览量:30026
53b2087e-c637-34d2-b61d-257846f73ade
RedisCluster开...
浏览量:149142
C9f66038-7478-3388-8086-d20c1f535495
缓存的使用与设计
浏览量:122714
社区版块
存档分类
最新评论

BigMemroy系列文章--8. Bigmemory快速接入实战

阅读更多

转载请注明出处哈:http://carlosfu.iteye.com/blog/2237511


 

更多BigMemory Go可参考官方文档:

一、BigMemory证书:

 

(1). 由于BigMemory是商业版,需要从官网上注册、下载证书(目前只支持90天)和对应版本的jar包:

下载地址:http://terracotta.org/downloads/bigmemorygo,完成表单填写,完成下载。

 

(2). 可以将证书放到classpath下,或者加入启动参数:

 

-Dcom.tc.productkey.path=/path/to/terracotta-license.key

 

(3). 证书示例: 

 

# This software license, granted by Terracotta Inc. - a Software AG company, is valid for and may only be used
# by the licensee of this product ("Licensee").
# Descriptor version: 4
# ------------------------------------------------------------------------------------
Date of Issue: 2015-08-19
Expiration Date: 2015-11-17
License Type: Trial
License Number: 1009994
Licensee: deren zhang, it
Email: 490431513@qq.com
Product: BigMemory Go
Edition: DX
Capabilities: ehcache, TMC, ehcache offheap
Max Client Count: 0
ehcache.maxOffHeap: 32G
Signature: MC0CFHmKKAqyuq+bmly3S6GzM9yJDznNAhUAjDDruAR/GtZRFs2dkUP6WtK7MTU=

 

其中:

ehcache.maxOffHeap代表最大的堆外内存

Capabilities: ehcache, TMC, ehcache offheap:表示证书可以适用于 ehcache, TMC, ehcache offheap

Signature:证书号

二、依赖

1. BigMemory依赖

<bigmemory.version>4.0.5</bigmemory.version>
<ehcache-ee.version>2.7.5</ehcache-ee.version>
<dependency>
    <groupId>org.terracotta.bigmemory</groupId>
    <artifactId>bigmemory</artifactId>
    <version>${bigmemory.version}</version>
</dependency>
<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache-ee</artifactId>
    <version>${ehcache-ee.version}</version>
</dependency>

 

2. 序列化工具protostuff依赖

<protostuff.version>1.0.8</protostuff.version>
<dependency>
    <groupId>com.dyuproject.protostuff</groupId>
    <artifactId>protostuff-runtime</artifactId>
    <version>${protostuff.version}</version>
</dependency>
<dependency>
    <groupId>com.dyuproject.protostuff</groupId>
    <artifactId>protostuff-core</artifactId>
    <version>${protostuff.version}</version>
</dependency>

 

3. logback依赖(logback实现了slf4j-api)

<logback.version>1.0.13</logback.version>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>${logback.version}</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>${logback.version}</version>
</dependency>    

4. 引入junit

<junit.version>4.11</junit.version>
<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>${junit.version}</version>
</dependency>

 

5.最终pom配置

<properties>
    <bigmemory.version>4.0.5</bigmemory.version>
    <ehcache-ee.version>2.7.5</ehcache-ee.version>
    <protostuff.version>1.0.8</protostuff.version>
    <logback.version>1.0.13</logback.version>
    <junit.version>4.11</junit.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.terracotta.bigmemory</groupId>
        <artifactId>bigmemory</artifactId>
        <version>${bigmemory.version}</version>
    </dependency>
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache-ee</artifactId>
        <version>${ehcache-ee.version}</version>
    </dependency>
    <dependency>
        <groupId>com.dyuproject.protostuff</groupId>
        <artifactId>protostuff-runtime</artifactId>
        <version>${protostuff.version}</version>
    </dependency>
    <dependency>
        <groupId>com.dyuproject.protostuff</groupId>
        <artifactId>protostuff-core</artifactId>
        <version>${protostuff.version}</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${logback.version}</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

 

三、BigMemory配置 

 

BigMemory的配置一般也叫ehcache.xml, 放到classpath下:我们使用极简配置

<?xml version="1.0" encoding="UTF-8" ?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">    
    <cache name="firstOffHeapCache" maxBytesLocalHeap="32M" maxBytesLocalOffHeap="1024M"/>
</ehcache>

 

Bigmemory的配置相对于Ehcache添加了两个属性:

maxBytesLocalOffHeap: 最大堆外内存
maxBytesLocalHeap:堆外内存在堆内内存的热点数据最大值

 

四、logback配置

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

 

 五、BigMemory测试:

1. 一个实体类:

package com.sohu.tv.bigmemory.first;
import java.util.Date;
/**
 * 俱乐部
 * 
 * @author leifu
 * @Date 2015年7月28日
 * @Time 下午1:43:53
 */
public class Club {
    /**
     * 俱乐部id
     */
    private int id;
    /**
     * 俱乐部名
     */
    private String clubName;
    /**
     * 俱乐部描述
     */
    private String clubInfo;
    /**
     * 创建日期
     */
    private Date createDate;
    /**
     * 排名
     */
    private int rank;
    public Club(int id, String clubName, String clubInfo, Date createDate, int rank) {
        super();
        this.id = id;
        this.clubName = clubName;
        this.clubInfo = clubInfo;
        this.createDate = createDate;
        this.rank = rank;
    }
    public Club() {
        super();
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getClubName() {
        return clubName;
    }
    public void setClubName(String clubName) {
        this.clubName = clubName;
    }
    public String getClubInfo() {
        return clubInfo;
    }
    public void setClubInfo(String clubInfo) {
        this.clubInfo = clubInfo;
    }
    public Date getCreateDate() {
        return createDate;
    }
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
    public int getRank() {
        return rank;
    }
    public void setRank(int rank) {
        this.rank = rank;
    }
    @Override
    public String toString() {
        return "Club [id=" + id + ", clubName=" + clubName + ", clubInfo=" + clubInfo + ", createDate=" + createDate
                + ", rank=" + rank + "]";
    }
}

 

2. BigMemory测试(Ehcache单元测试作为测试)

(1) 单元测试:
package com.sohu.tv.bigmemory.first;
import java.util.Date;
import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
/**
 * 第一个BigMemory测试
 * 
 * @author leifu
 * @Date 2015年8月12日
 * @Time 上午10:14:13
 */
public class FirstBigmemoryTest {
    private static Logger logger = LoggerFactory.getLogger(FirstBigmemoryTest.class);
    private static Cache cache;
    private static final String BIGMEORY_CACHE_NAME = "firstOffHeapCache";
     
    @BeforeClass
    public static void setUp() {
        CacheManager cacheManager = CacheManager.create(FirstBigmemoryTest.class.getClassLoader()
                .getResourceAsStream("ehcache.xml"));
        // 打印cacheManager管理的cache
        String[] cacheNameArr = cacheManager.getCacheNames();
        for (String cacheName : cacheNameArr) {
            logger.info("cacheName: {}", cacheName);
        }
        cache = cacheManager.getCache(BIGMEORY_CACHE_NAME);
    }
    @Test
    public void testCRUD() {
        logger.info("At start, bigmemory object size: {}", cache.getSize());
        // 唯一key
        String key = "football:club:1";
        Club club = new Club(1, "AC", "AC米兰", new Date(), 1);
        // 增
        Element element = new Element(key, club);
        cache.put(element);
        logger.info("after add bigmemory object size: {}", cache.getSize());
        // 查
        Element elementResult = cache.get(key);
        Club clubResult = (Club) elementResult.getObjectValue();
        logger.info("get key {} value is {}", key, clubResult.toString());
        // 修改
        club.setRank(8888);
        cache.put(element);
        logger.info("after set bigmemory object size: {}", cache.getSize());
        // 再查
        Element elementResultAgain = cache.get(key);
        Club clubResultAgain = (Club) elementResultAgain.getObjectValue();
        logger.info("get key {} again value is {}", key, clubResultAgain.toString());
        // 删
        boolean removeResult = cache.remove(key);
        logger.info("remove result is {}, after remove bigmemory object size: {}", removeResult, cache.getSize());
        // 增加一条,观察下次启动
        cache.put(element);
        logger.info("At final, bigmemory object size: " + cache.getSize());
        // 生产环境不要使用,影响性能
        logger.info("At final, bigmemory memory size: " + cache.calculateInMemorySize());
    }
}

 

(2) 输出报错:Club必须序列化

 

net.sf.ehcache.CacheException: The element '[ key = football:club:1, value=Club [id=1, clubName=AC, clubInfo=AC米兰, createDate=Sat Aug 22 09:40:29 CST 2015, rank=1], version=1, hitCount=0, CreationTime = 1440207629814, LastAccessTime = 1440207629814 ]' is not serializable and cannot be put into the offheap cache firstOffHeapCache
at net.sf.ehcache.store.offheap.OffHeapStore.handleNotSerializableException(OffHeapStore.java:384)
at net.sf.ehcache.store.offheap.OffHeapStore.putFaulted(OffHeapStore.java:419)
at net.sf.ehcache.store.CacheStore$2.call(CacheStore.java:127)
at net.sf.ehcache.store.CacheStore$2.call(CacheStore.java:121)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier$Fault.get(OnHeapCachingTier.java:327)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier$Fault.access$200(OnHeapCachingTier.java:304)
at net.sf.ehcache.store.cachingtier.OnHeapCachingTier.get(OnHeapCachingTier.java:174)
at net.sf.ehcache.store.CacheStore.put(CacheStore.java:121)
at net.sf.ehcache.Cache.putInternal(Cache.java:1501)
at net.sf.ehcache.Cache.put(Cache.java:1427)
at net.sf.ehcache.Cache.put(Cache.java:1392)
at com.sohu.tv.bigmemory.first.FirstBigmemoryTest.testCRUD(FirstBigmemoryTest.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
 

 

(3) 修复:Club实现序列化接口
public class Club implements Serializable

 

(4) 输出结果正常:

输出信息包含证书的验证、BigMemory堆外内存的分配

11:04:00.965 [main] INFO o.t.license.ehcache.LicenseManager - Terracotta license loaded from resource /terracotta-license.key
Date of Issue: 2015-08-19
Expiration Date: 2015-11-17
License Type: Trial
License Number: 1009994
Licensee: deren zhang, it
Email: 490431513@qq.com
Product: BigMemory Go
Edition: DX
Capabilities: ehcache, TMC, ehcache offheap
Max Client Count: 0
ehcache.maxOffHeap: 32G
11:04:01.287 [main] INFO n.s.e.p.s.f.AnnotationSizeOfFilter - Using regular expression provided through VM argument net.sf.ehcache.pool.sizeof.ignore.pattern for IgnoreSizeOf annotation : ^.*cache\..*IgnoreSizeOf$
11:04:01.296 [main] INFO n.sf.ehcache.pool.sizeof.AgentLoader - Located valid 'tools.jar' at 'C:\Program Files\Java\jdk1.7.0_60\jre\..\lib\tools.jar'
11:04:01.358 [main] INFO n.s.e.pool.sizeof.JvmInformation - Detected JVM data model settings of: 64-Bit HotSpot JVM with Compressed OOPs
11:04:01.430 [main] INFO n.sf.ehcache.pool.sizeof.AgentLoader - Extracted agent jar to temporary file C:\Users\leifu\AppData\Local\Temp\ehcache-sizeof-agent1571240522467793322.jar
11:04:01.430 [main] INFO n.sf.ehcache.pool.sizeof.AgentLoader - Trying to load agent @ C:\Users\leifu\AppData\Local\Temp\ehcache-sizeof-agent1571240522467793322.jar
11:04:01.438 [main] INFO n.s.e.pool.impl.DefaultSizeOfEngine - using Agent sizeof engine
11:04:01.510 [main] INFO n.s.e.s.offheap.OffHeapStoreFactory - Creating Off-Heap Area Using Config
Heuristic Configuration: firstOffHeapCache
Maximum Size (specified) : 2GB
Minimum Chunk Size : 128MB
Maximum Chunk Size : 1GB
Concurrency : 64
Initial Segment Table Size : 1K slots
Segment Data Page Size : 1MB
11:04:01.515 [main] INFO c.t.o.p.UpfrontAllocatingPageSource - Allocating 2GB in chunks
11:04:02.215 [main] INFO c.t.o.p.UpfrontAllocatingPageSource - Allocated 2GB in 1GB chunks.
11:04:02.215 [main] INFO c.t.o.p.UpfrontAllocatingPageSource - Took 699 ms to create CacheManager off-heap storage of 2GB.
11:04:02.304 [main] INFO c.s.t.b.first.FirstBigmemoryTest - cacheName: firstOffHeapCache
11:04:02.307 [main] INFO c.s.t.b.first.FirstBigmemoryTest - At start, bigmemory object size: 0
11:04:02.343 [main] INFO c.s.t.b.first.FirstBigmemoryTest - after add bigmemory object size: 1
11:04:02.346 [main] INFO c.s.t.b.first.FirstBigmemoryTest - get key football:club:1 value is Club [id=1, clubName=AC, clubInfo=AC米兰, createDate=Sat Aug 22 11:04:02 CST 2015, rank=1]
11:04:02.396 [main] INFO c.s.t.b.first.FirstBigmemoryTest - after set bigmemory object size: 1
11:04:02.396 [main] INFO c.s.t.b.first.FirstBigmemoryTest - get key football:club:1 again value is Club [id=1, clubName=AC, clubInfo=AC米兰, createDate=Sat Aug 22 11:04:02 CST 2015, rank=8888]
11:04:02.397 [main] INFO c.s.t.b.first.FirstBigmemoryTest - remove result is true, after remove bigmemory object size: 0
11:04:02.398 [main] INFO c.s.t.b.first.FirstBigmemoryTest - At final, bigmemory object size: 1
11:04:02.398 [main] INFO c.s.t.b.first.FirstBigmemoryTest - At final, bigmemory memory size: 784

  

3. BigMemory测试结论:

 

(1) 堆外内存存储的数据需要序列化。

 

(2) BigMemory使用Ehcache ee可以自动完成序列化,如果使用BigMemory存储java对象,就会存在SizeOf问题(简单对象除外),所以可以使用预序列化方式序列化要存的数据。

      具体参考:BigMemory关于sizeOf引擎的测试.

 

(3) BigMemory启动时候,会寻找BigMemory证书。

11:04:00.965 [main] INFO o.t.license.ehcache.LicenseManager - Terracotta license loaded from resource /terracotta-license.key

 

 

(4) 以下是bigMemory启动时打印的DirectMemory分区概述,

Maximum Size (specified) : 2GB
Minimum Chunk Size : 128MB
Maximum Chunk Size : 1GB
Concurrency : 64
Initial Segment Table Size : 1K slots
Segment Data Page Size : 1MB

 

 

根据日志,可以猜测出BigMemory预先将数据空间划分为一系列Chunk,目的为了防止内存碎片化,与Memcache内存分配策略很像.

六、BigMemory堆外内存,JVM启动参数:

 

-XX:MaxDirectMemorySize=4G

 

七、BigMemory更多使用示例:

http://www.terracotta.org/documentation/4.0/bigmemorygo/code-samples

 

 八、使用ProtoStuff序列化:

1. ProtoStuff序列化工具:

package com.sohu.tv.serializer;
import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.ProtostuffIOUtil;
import com.dyuproject.protostuff.Schema;
import com.dyuproject.protostuff.runtime.RuntimeSchema;
import java.util.concurrent.ConcurrentHashMap;
/**
 * protostuff序列化工具
 * 
 * @author leifu
 * @Date 2015-8-22
 * @Time 上午10:05:20
 */
public class ProtostuffSerializer {
    private static ConcurrentHashMap<Class<?>, Schema<?>> cachedSchema = new ConcurrentHashMap<Class<?>, Schema<?>>();
    public <T> byte[] serialize(final T source) {
        VO<T> vo = new VO<T>(source);
        final LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);
        try {
            final Schema<VO> schema = getSchema(VO.class);
            return serializeInternal(vo, schema, buffer);
        } catch (final Exception e) {
            throw new IllegalStateException(e.getMessage(), e);
        } finally {
            buffer.clear();
        }
    }
    public <T> T deserialize(final byte[] bytes) {
        try {
            Schema<VO> schema = getSchema(VO.class);
            VO vo = deserializeInternal(bytes, schema.newMessage(), schema);
            if (vo != null && vo.getValue() != null) {
                return (T) vo.getValue();
            }
        } catch (final Exception e) {
            throw new IllegalStateException(e.getMessage(), e);
        }
        return null;
    }
    private <T> byte[] serializeInternal(final T source, final Schema<T> schema, final LinkedBuffer buffer) {
        return ProtostuffIOUtil.toByteArray(source, schema, buffer);
    }
    private <T> T deserializeInternal(final byte[] bytes, final T result, final Schema<T> schema) {
        ProtostuffIOUtil.mergeFrom(bytes, result, schema);
        return result;
    }
    private static <T> Schema<T> getSchema(Class<T> clazz) {
        @SuppressWarnings("unchecked")
        Schema<T> schema = (Schema<T>) cachedSchema.get(clazz);
        if (schema == null) {
            schema = RuntimeSchema.createFrom(clazz);
            cachedSchema.put(clazz, schema);
        }
        return schema;
    }
}

 

package com.sohu.tv.serializer;
import java.io.Serializable;
/**
 * @author leifu
 * @Date 2015-8-22
 * @Time 上午10:05:44
 * @param <T>
 */
public class VO<T> implements Serializable {
    private T value;
    public VO(T value) {
        this.value = value;
    }
    public VO() {
    }
    public T getValue() {
        return value;
    }
    @Override
    public String toString() {
        return "VO{" +
                "value=" + value +
                '}';
    }
}

2. ProtoStuff + BigMemory单元测试:

@Test
public void testBigMemoryWithSerializable() {
    ProtostuffSerializer protostuffSerializer = new ProtostuffSerializer();
    // 唯一key
    String key = "football:club:1";
    byte[] clubBytes = protostuffSerializer.serialize(new Club(1, "AC", "AC米兰", new Date(), 1));
    // 增
    Element element = new Element(key, clubBytes);
    cache.put(element);
    // 查
    Element elementResult = cache.get(key);
    byte[] clubBytesResult = (byte[]) elementResult.getObjectValue();
    Club clubResult = protostuffSerializer.deserialize(clubBytesResult);
    logger.info("get key {} value is {}", key, clubResult.toString());
}

 

输出:

12:49:31.276 [main] INFO o.t.license.ehcache.LicenseManager - Terracotta license loaded from resource /terracotta-license.key
Date of Issue: 2015-08-19
Expiration Date: 2015-11-17
License Type: Trial
License Number: 1009994
Licensee: deren zhang, it
Email: 490431513@qq.com
Product: BigMemory Go
Edition: DX
Capabilities: ehcache, TMC, ehcache offheap
Max Client Count: 0
ehcache.maxOffHeap: 32G
12:49:31.627 [main] INFO n.s.e.p.s.f.AnnotationSizeOfFilter - Using regular expression provided through VM argument net.sf.ehcache.pool.sizeof.ignore.pattern for IgnoreSizeOf annotation : ^.*cache\..*IgnoreSizeOf$
12:49:31.634 [main] INFO n.sf.ehcache.pool.sizeof.AgentLoader - Located valid 'tools.jar' at 'C:\Program Files\Java\jdk1.7.0_60\jre\..\lib\tools.jar'
12:49:31.694 [main] INFO n.s.e.pool.sizeof.JvmInformation - Detected JVM data model settings of: 64-Bit HotSpot JVM with Compressed OOPs
12:49:31.771 [main] INFO n.sf.ehcache.pool.sizeof.AgentLoader - Extracted agent jar to temporary file C:\Users\leifu\AppData\Local\Temp\ehcache-sizeof-agent7979572902856961639.jar
12:49:31.771 [main] INFO n.sf.ehcache.pool.sizeof.AgentLoader - Trying to load agent @ C:\Users\leifu\AppData\Local\Temp\ehcache-sizeof-agent7979572902856961639.jar
12:49:31.783 [main] INFO n.s.e.pool.impl.DefaultSizeOfEngine - using Agent sizeof engine
12:49:31.839 [main] INFO n.s.e.s.offheap.OffHeapStoreFactory - Creating Off-Heap Area Using Config
Heuristic Configuration: firstOffHeapCache
Maximum Size (specified) : 2GB
Minimum Chunk Size : 128MB
Maximum Chunk Size : 1GB
Concurrency : 64
Initial Segment Table Size : 1K slots
Segment Data Page Size : 1MB
12:49:31.847 [main] INFO c.t.o.p.UpfrontAllocatingPageSource - Allocating 2GB in chunks
12:49:32.682 [main] INFO c.t.o.p.UpfrontAllocatingPageSource - Allocated 2GB in 1GB chunks.
12:49:32.682 [main] INFO c.t.o.p.UpfrontAllocatingPageSource - Took 835 ms to create CacheManager off-heap storage of 2GB.
12:49:32.801 [main] INFO c.s.t.b.first.FirstBigmemoryTest - cacheName: firstOffHeapCache
12:49:32.952 [main] INFO c.s.t.b.first.FirstBigmemoryTest - get key football:club:1 value is Club [id=1, clubName=AC, clubInfo=AC米兰, createDate=Sat Aug 22 12:49:32 CST 2015, rank=1]

 

 

 

分享到:
评论
3 楼 mrjianggd 2015-11-16  
官方网站给出的建议是配置hybrid后建议给足够空间存element的key部分,不过说也有钟方法可以将key部分存在磁盘,具体方法我没找到,所以请教下的?主要是因为我这边磁盘大,内存在一定的限定内,所以希望key也在磁盘上,不过实际测试配置hybrid后,存放数据到一定程度配置堆外内存大小后就会提示server is full,而我希望的是存放数据达到堆外大小后数据可以往磁盘放
2 楼 carlosfu 2015-11-14  
mrjianggd 写道
楼主能解答下bigmemory关于存放element时候,如何将key部分存在磁盘而非offheap吗?


直接存放在硬盘应该是不支持的,应该是offheap区域满了才会写到硬盘。
不过我不建议使用硬盘,既然使用的是bigmemory超高的性能,加上硬盘这种低性能且容易有故障的设备,有点适得其反了。不如后端在加其他存储好
1 楼 mrjianggd 2015-11-12  
楼主能解答下bigmemory关于存放element时候,如何将key部分存在磁盘而非offheap吗?

相关推荐

    基于STM32通过PWM驱动直流电机

    工程代码基于STM32F103C8T6,使用PWM输出驱动电机,电机驱动使用TB6612,通过按键控制电机速度,并且速度通过OLED显示屏进行显示 使用到的硬件:STM32F103C8T6最小系统板,四针脚OLED显示屏,直流电机,按键,TB6612电机驱动模块

    最新微信文章编辑器排版工具程序源码.rar

    最新微信文章编辑器排版工具程序源码.rar最新微信文章编辑器排版工具程序源码.rar最新微信文章编辑器排版工具程序源码.rar

    信息办公电信计费系统完整代码-netctossconformity.rar

    这个压缩包 "netctossconformity.rar" 包含了一套电信计费系统的完整代码,它是针对计算机专业学生或开发者的JSP源码资料。这套系统的设计旨在为电信运营商提供一个可靠、高效的计费解决方案。通常,这种系统会涉及到用户账户管理、费用计算、账单生成、支付处理以及数据报告等功能模块。在内容上,该资料包可能包括了前端用户界面和后端服务器逻辑的源代码,使用JSP(Java Server Pages)技术实现。前端可能会涵盖用户注册、登录、查看账单和支付历史等操作的用户界面,而后端则包含数据库交互、计费算法、用户验证和安全性措施等关键功能。对于学习者来说,这个资料包是一个宝贵的实践资源,可以帮助他们理解电信计费系统的工作原理,以及如何运用JSP技术开发复杂的商业应用。通过分析这些代码,可以加深对Java Web技术栈的理解,包括但不限于Servlet API、JDBC(Java Database Connectivity)、HTML/CSS/JavaScript,以及可能涉及的框架如Spring或Struts。此外,这个资料包也可能含有一些文档,例如系统设计说明、代码结构介绍、部

    交流电桥实验(95).zip

    交流电桥实验(95).zip

    matlab基于四自由度机械臂的轨迹规划源码.zip

    优秀源码设计,详情请查看资源内容

    MRU3-2保护技术简化电压继电器对称分量评估 SEG

    MRU3-2保护技术简化电压继电器对称分量评估 MRU3-2保护技术简单电压继电器,具有对称分量评估功能

    图3-7.zip

    图3-7.zip

    基于matlab开发的多元散射校正和变量标准化Matlab处理程序,可以对建模前的原始数据进行校正、处理.rar

    基于matlab开发的多元散射校正和变量标准化Matlab处理程序,可以对建模前的原始数据进行校正、处理.rar

    新建 文本文档.txt

    新建 文本文档.txt

    最新获取QQ微信头像橘头像阁PHP源码下载.rar

    最新获取QQ微信头像橘头像阁PHP源码下载.rar最新获取QQ微信头像橘头像阁PHP源码下载.rar

    3D模型004,可用于建模、GIS、BIM、CIM学习

    3D模型004,可用于建模、GIS、BIM、CIM学习

    node-v6.7.0.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    其他类别动态显示JSP服务器内存的Ajax程序 图像版-systemjc.rar

    在当今的Web开发中,实时监控服务器性能是至关重要的。其中,动态显示JSP服务器内存的Ajax程序图像版_systemjc.rar是一个为开发者和系统管理员提供便利的计算机专业JSP源码资料包。这个资料包的核心是一个高效的Ajax程序,它能够实时获取并展示JSP服务器的内存使用情况。通过使用这一工具,用户可以在一个直观的界面上看到服务器内存的使用率、已使用内存、可用内存等关键信息,而这一切都无需刷新页面。这得益于Ajax技术的强大功能,它允许在后台与服务器进行异步通信,从而获取最新的数据并更新前端界面。这个资料包不仅包含了完整的源代码,还提供了详细的文档和注释,使得即使是初级的JSP开发者也能够轻松地部署和使用。此外,它的图像版设计使得数据的展示更加直观和友好,帮助用户快速识别任何潜在的问题。总的来说,动态显示JSP服务器内存的Ajax程序图像版_systemjc.rar是一个强大、实用且易于使用的JSP源码资料包,它为实时监控服务器性能提供了一个有效的解决方案。重新回答||

    引领AI视频生成技术新潮流之Sora AI

    Sora AI,作为OpenAI继ChatGPT之后的又一重磅力作,以其独特的文本到视频模型技术,在AI内容创作领域掀起了一场革命性的风暴。本文将详细探讨Sora AI的技术特点、应用场景以及未来发展趋势,展现其在视频制作、广告、教育和娱乐产业中的巨大潜力。 Sora AI作为OpenAI的又一力作,以其独特的文本到视频模型技术引领了AI视频生成技术的新潮流。通过深入了解Sora AI的技术特点、应用场景和未来发展趋势,我们可以看到它在视频制作、广告、教育和娱乐产业中的巨大潜力和广阔前景。然而,我们也应清醒地认识到,技术的发展总是伴随着挑战和问题,只有不断探索和解决这些问题,才能让Sora AI更好地服务于人类社会。

    新闻文章NTsky新闻发布系统 v1.0稳定版-18655.rar

    NTsky新闻发布系统 v1.0稳定版_18655.rar是一款专为计算机专业人士设计的JSP源码资料包。这款资料包的主要功能是帮助用户快速、高效地管理和发布新闻信息。它采用了先进的JSP技术,结合了数据库管理系统,使得新闻的发布和管理变得简单而直观。该资料包包含了完整的源代码,用户可以根据自己的需求进行修改和优化。同时,它还提供了详细的使用说明和技术文档,即使是对JSP技术不太熟悉的用户,也能快速上手。此外,该资料包还具有良好的用户界面设计,使得操作更加人性化。NTsky新闻发布系统 v1.0稳定版_18655.rar的另一个优点是其稳定性。经过多次测试和优化,该系统已经达到了稳定运行的状态,可以满足用户在各种环境下的使用需求。无论是在个人电脑上,还是在服务器上,都能稳定运行。总的来说,NTsky新闻发布系统 v1.0稳定版_18655.rar是一款功能强大、操作简便、稳定性高的JSP源码资料包。无论是对于专业的计算机人士,还是对于初学者,都是一个很好的学习和使用工具。重新回答||

    node-v6.17.1.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    245ssm-mysql-jsp 在线租房系统.zip(可运行源码+数据库文件+文档)

    此次开发的是一款在线的租房管理系统,该系统从功能上来看,应该具备以下模块: (1)房源信息模块:房源信息展示、房源信息更新、房源信息增加、房源信息删除; (2)账户管理模块:账户登录、账户绑定、账户管理; (3)租金结算模块:每月租金信息、租金交付功能、月租金收入总额统计; (4)房屋租赁合同管理模块:房屋租赁合同录入、房屋租赁合同展示、房屋租赁价格修改、房屋租赁合同终止; (5)报障模块:租客报账、管理员报障审核、租客报障统计; (6)日程模块:收租日程显示; 从角色的需求上来划分,应当具有三个角色要素,分别为租客、出租方以及管理员三个角色,租客能够实现在线的查看房源,申请租房,签订租赁合同以及租金每月支付等功能。房东应当可以实现租金收入的统计,租赁合同的展示以及租赁价格的修改等。管理员能够通过后台的管理对网站信息进行常规化的管理操作。 通过SSM框架技术搭建在线租房网站,能够实现出租方在线登记房源信息,租赁方能够在线查看消息,并在线与出租人进行沟通,可以实现在线租房申请。后台的管理员能够通过管理手段来对整个系统进行维护和管理。

    udacity机器学习工程师毕业项目.zip

    机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径。 机器学习的发展历程可以追溯到20世纪50年代,当时Arthur Samuel在IBM开发了第一个自我学习程序,一个西洋棋程序,这标志着机器学习的起步。随后,Frank Rosenblatt发明了第一个人工神经网络模型——感知机。在接下来的几十年里,机器学习领域取得了许多重要的进展,包括最近邻算法、决策树、随机森林、深度学习等算法和技术的发展。 机器学习有着广泛的应用场景,如自然语言处理、物体识别和智能驾驶、市场营销和个性化推荐等。通过分析大量的数据,机器学习可以帮助我们更好地理解和解决各种复杂的问题。例如,在自然语言处理领域,机器学习技术可以实现机器翻译、语音识别、文本分类和情感分析等功能;在物体识别和智能驾驶领域,机器学习可以通过训练模型来识别图像和视频中的物体,并实现智能驾驶等功能;在市场营销领域,机器学习可以帮助企业分析用户的购买行为和偏好,提供个性化的产品推荐和定制化的营销策略。 总的来说,机器学习是一个快速发展且充满潜力的领域,它正在不断地改变我们的生活和工作方式。随着技术的不断进步和应用场景的不断扩展,相信机器学习将会在未来发挥更加重要的作用。

    node-v12.6.0-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    最新UI站长引流工具箱 带后台+安装说明.rar

    最新UI站长引流工具箱 带后台+安装说明.rar最新UI站长引流工具箱 带后台+安装说明.rar最新UI站长引流工具箱 带后台+安装说明.rar

Global site tag (gtag.js) - Google Analytics