最近,我们打开了一个生产服务器的ehcache jmx界面,并开始连续监控。
监控时,我们发现一个小对象的缓存似乎有一个上限容量,就像100万。
这是监视器图表,具有上限金额。图表的y轴是缓存中的ObjectCount,它是通过ehcache jmx接口获得的。
我们的缓存设置如下:
public class ProductStock {
private long productId;
private int productCount;
private int pickingCount;
private int lackType;
private int areaSale;
//getter and setter....
}
在cachemanager级别没有指定的配置。
我们的缓存类就像:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int j = 0;
int a[][] = new int[n][n];
int count1 = 0; int count2 = 0;
int result = 0;
for(int a_i=0; a_i < n; a_i++){
for(int a_j = 0;a_j < n;a_j++){
a[a_i][j] = in.nextInt();
}}
for(int i = 0;i<n;i++)
{
count1+=a[i][j];
System.out.println(count1);
j++;
}
j = 0;
for(int i = n-1;i>=0;i--)
{
count2+=a[i][j];
System.out.println(count2);
j++;
}
result = Math.abs(count1 - count2);
System.out.println(result);
}
我们研究了ehcache的对象大小估算方法,它使用google的sizeof-agent.jar。
我们使用sizeof-agent.jar进行测试。我们类的实例堆大小约为40字节。如果我们超过100万,它就等于40M,远低于我们配置的200M。
另外,我们搜索了ehcache(2.8.5)的来源,并没有发现任何100万的限制。另外,我们在eclipse调试模型中检查了ehcachemanager实例的配置,maxEntriesOnHeap为0,这意味着没有限制。
这是有线的,我们错过了什么信息吗?是监控图的内涵吗?
答案 0 :(得分:0)
我知道没有1 000 000个条目限制。你能提供完整的ehcache.xml
吗?
你看过JMX的统计数据吗?有没有驱逐?