Andrei - 

Thank for your reply, sorry for missing a sentence in this post, it should
be: there are almost 0.013% read requests take more than 20ms, and 0.0336%
more than 200ms. 
When the traffic is very large, the number of requests over 200ms will be
very large. So I want to know where the time is spent, client or server.

I think GC is not the root cause since most of GC time is less than 10ms and
GC is not frequently.

My benchmark code is simple, read and write cache with 8 threads, about 3300
getAll operations and 3300 putAll operations every second, and every
getAll/putAll contains three entries.

The ignite cluster has three nodes(8core 16g, 3g JVM heap).

*Here is my server configuration:*
<?xml version="1.0" encoding="UTF-8"?>
    <bean class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="systemThreadPoolSize" value="64"/>
        <property name="discoverySpi">
            <bean
class="org.apache.ignite.spi.discovery.zk.ZookeeperDiscoverySpi">
                <property name="zkConnectionString" value="*********"/>
                <property name="sessionTimeout" value="30000"/>
                <property name="zkRootPath" value="/ignite/discovery"/>
                <property name="joinTimeout" value="10000"/>
            </bean>
        </property>

        <property name="gridLogger">
            <bean class="org.apache.ignite.logger.log4j2.Log4J2Logger">
            <constructor-arg type="java.lang.String" value="log4j2.xml"/>
            </bean>
        </property>

        <property name="communicationSpi">
            <bean
class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
                <property name="localPort" value="47174"/>
                <property name="messageQueueLimit" value="1024"/>
            </bean>
        </property>

        <property name="dataStorageConfiguration">
            <bean
class="org.apache.ignite.configuration.DataStorageConfiguration">
                <property name="metricsEnabled" value="true"/>
                <property name="writeThrottlingEnabled" value="true"/>
                <property name="storagePath"
value="/data/ignite/persistence"/>
                <property name="walPath" value="/data/ignite/wal"/>
                <property name="walArchivePath"
value="/data/lib/ignite/wal/archive"/>
                <property name="dataRegionConfigurations">
                    <list>
                        <bean
class="org.apache.ignite.configuration.DataRegionConfiguration">
                            <property name="name" value="1G_DataRegion"/>
                            <property name="persistenceEnabled"
value="true"/>
                            <property name="metricsEnabled" value="true"/>
                            <property name="initialSize" value="#{512L *
1024 * 1024}"/>
                            <property name="maxSize" value="#{1L * 1024 *
1024 * 1024}"/>
                        </bean>

                        <bean
class="org.apache.ignite.configuration.DataRegionConfiguration">
                            <property name="name" value="3G_DataRegion"/>
                            <property name="persistenceEnabled"
value="false"/>
                            <property name="metricsEnabled" value="true"/>
                            <property name="initialSize" value="#{512L *
1024 * 1024}"/>
                            <property name="maxSize" value="#{3L * 1024 *
1024 * 1024}"/>
                            <property name="pageEvictionMode" 
value="RANDOM_2_LRU"/>
                        </bean>
                    </list>
                </property>
            </bean>
        </property>
        <property name="includeEventTypes">
            <list>
                <util:constant
static-field="org.apache.ignite.events.EventType.EVT_TASK_STARTED"/>
                <util:constant
static-field="org.apache.ignite.events.EventType.EVT_TASK_FINISHED"/>
                <util:constant
static-field="org.apache.ignite.events.EventType.EVT_TASK_FAILED"/>
            </list>
        </property>
    </bean>
</beans>

*Here is my cache configuration:*

private static CacheConfiguration<String, BinaryObject>
getCacheConfiguration(IgniteConfiguration cfg) {
        CacheConfiguration<String, BinaryObject> cacheCfg =
DefaultIgniteConfiguration.getCacheConfiguration(IgniteCacheKey.DATA_POINT.getCode());
        cacheCfg.setBackups(1);
        cacheCfg.setDataRegionName(Constants.THREE_GB_REGION);
       
cacheCfg.setCacheStoreFactory(FactoryBuilder.factoryOf(DataPointCacheStore.class));
        cacheCfg.setWriteThrough(true);
        cacheCfg.setWriteBehindEnabled(true);
        cacheCfg.setWriteBehindFlushThreadCount(2);
        //every 15 seconds
        cacheCfg.setWriteBehindFlushFrequency(15 * 1000);
        cacheCfg.setWriteBehindFlushSize(409600);
        cacheCfg.setWriteBehindBatchSize(512);
        cacheCfg.setStoreKeepBinary(true);
        cacheCfg.setQueryParallelism(4);
        //2M
        cacheCfg.setRebalanceBatchSize(2 * 1024 * 1024);

        List<QueryEntity> entities = getQueryEntities();
        cacheCfg.setQueryEntities(entities);

        cfg.setCacheConfiguration(cacheCfg);
        return cacheCfg;
    }

    private static List<QueryEntity> getQueryEntities() {
        List<QueryEntity> entities = Lists.newArrayList();

        QueryEntity entity = new QueryEntity(String.class.getName(),
DpCache.class.getName());
        entity.setTableName(IgniteTableKey.T_DATA_POINT.getCode());

        LinkedHashMap<String, String> map = new LinkedHashMap<>();
        map.put("id", "java.lang.String");
        map.put("gmtCreate", "java.lang.Long");
        map.put("gmtModified", "java.lang.Long");
        map.put("devId", "java.lang.String");
        map.put("dpId", "java.lang.Integer");
        map.put("code", "java.lang.String");
        map.put("name", "java.lang.String");
        map.put("customName", "java.lang.String");
        map.put("mode", "java.lang.String");
        map.put("type", "java.lang.String");
        map.put("value", "java.lang.String");
        map.put("rawValue", byte[].class.getName());
        map.put("time", "java.lang.Long");
        map.put("status", "java.lang.Boolean");
        map.put("uuid", "java.lang.String");

        entity.setFields(map);

        QueryIndex devIdIdx = new QueryIndex("devId");
        devIdIdx.setName("idx_devId");
        QueryIndex dpIdIdx = new QueryIndex("dpId");
        dpIdIdx.setName("idx_dpId");
        List<QueryIndex> indexes = Lists.newArrayList(devIdIdx, dpIdIdx);
        entity.setIndexes(indexes);

        entities.add(entity);

        return entities;
    }



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to