小编dce*_*chi的帖子

在Full GC之后导致套接字连接变慢的原因是什么?

我们有一个客户端服务器应用,1个服务器,大约10个客户端.它们使用自定义查询通过tcp套接字进行通信.

该系统运行平稳了好几个月,但在某些时候,在每日计划服务器FULL GC耗时约50秒后,我们发现客户端发送的查询与从服务器收到的响应之间的时间很长,> 10-20s.系统恢复3个小时后,一切都恢复正常.

在调查问题时,我们发现:

  1. 客户端和服务器上都没有垃圾回收问题
  2. 服务器上的查询处理时间很短.
  3. 服务器上的负载很高.
  4. 网络带宽未饱和.
  5. FULL GC期间未重置连接(每日FULL GC是正常事件,直到那时)
  6. 机器和操作系统最近从Centos 6(内核2.6.32)更改为Centos 7(内核3.10.0),但新配置已经过广泛测试.Oracle JDK版本也从1.7.65变为1.7.75.

我们在服务器上进行了一次线程转储:

java.lang.Thread.State: RUNNABLE
    at java.io.FilterInputStream.read(FilterInputStream.java:83)
    at util.network.BytesBasedSocketConnection$ReadConnectionRunnable.run(BytesBasedSocketConnection.java:293)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

FilterInputStream.read()如下:

    public int read() throws IOException {
    return in.read();
}
Run Code Online (Sandbox Code Playgroud)

in我们的代码是一个BufferedInputStream.

问题是:为什么大多数连接在完全GC暂停后放慢了?为什么stacktrace结束FilterInputStream.read()?它不应该BufferedInputStream在套接字输入流中的某个地方结束吗?这读取会导致服务器上的高负载吗?

我们用于阅读的代码:

int constructLength = _socketDIS.readInt();
ByteArrayOutputStream constructBOAS = new ByteArrayOutputStream(constructLength);
for (int i = 0; i != constructLength; i++) …
Run Code Online (Sandbox Code Playgroud)

java sockets networking high-load inputstream

18
推荐指数
2
解决办法
1235
查看次数

为什么并发标记和清除(CMS)没有像Full GC那样清理相同数量的内存?

我的一台生产机器有一个奇怪的问题.它托管一个执行CMS(并发标记和扫描)的Java应用程序,但它只清理了旧一代的一小部分.我怀疑内存泄漏并尝试了堆转储.但堆转储之前的Full GC几乎清除了所有旧代.发生了什么?我从未见过Java垃圾收集的这种行为.通常CMS和Full GC应该收集大约相同数量的垃圾,现在CMS保持大约10GB以上.

  • Java 1.7.0_75
  • Linux Cent OS 7

GC日志:

**2016-01-04T07:37:40.196+0000: 431200.698: [GC [1 CMS-initial-mark: 21633423K(27336704K)] 22826703K(30101504K), 4.3910840 secs] [Times: user=4.40 sys=0.01, real=4.39 secs] 
2016-01-04T07:37:44.588+0000: 431205.090: [CMS-concurrent-mark-start]
2016-01-04T07:38:08.718+0000: 431229.220: [CMS-concurrent-mark: 18.213/24.131 secs] [Times: user=126.00 sys=2.22, real=24.13 secs] 
2016-01-04T07:38:08.718+0000: 431229.220: [CMS-concurrent-preclean-start]
2016-01-04T07:38:08.843+0000: 431229.345: [CMS-concurrent-preclean: 0.118/0.125 secs] [Times: user=0.29 sys=0.00, real=0.12 secs] 
2016-01-04T07:38:08.843+0000: 431229.345: [CMS-concurrent-abortable-preclean-start]
 CMS: abort preclean due to time 2016-01-04T07:38:13.906+0000: 431234.408: [CMS-concurrent-abortable-preclean: 4.975/5.063 secs] [Times: user=10.18 sys=0.03, real=5.06 secs] 
2016-01-04T07:38:14.001+0000: 431234.503: [GC[YG occupancy: 1312993 K (2764800 K)]2016-01-04T07:38:14.001+0000: 431234.503: [Rescan (parallel) …
Run Code Online (Sandbox Code Playgroud)

java garbage-collection heap-memory concurrent-mark-sweep

14
推荐指数
1
解决办法
3036
查看次数

anorm动态过滤器

我正在研究anorm文档(来自播放框架)并且不清楚它是否支持常见的查询用例:动态过滤器,即用户在10字段搜索表单上填写2或3个搜索条件.

在这种情况下,如何在没有经典字符串操作的情况下动态构造查询?

scala playframework anorm playframework-2.0

13
推荐指数
1
解决办法
1558
查看次数

使用RichFaces下载文件

我已经完成了以下工作:

  1. 用户可以上传文件(即压缩档案)
  2. 用户可以解压缩服务器上的文件
  3. 用户可以对这些文件执行一些操作,从而生成更多文件

现在我需要让第4步工作:

  • 用户可以再次将文件下载到自己的计算机上

任何人都可以给我一个提示吗?我试图了解我在谷歌上发现的东西,但它并没有像预期的那样发挥作用.我是否必须设置内容类型?当我设置应用程序/八位字节流时​​,只有txt和csv文件才能正确显示(在浏览器中,而不是我想要的下载弹出窗口)其他文件无效...

JSP:

<a4j:commandLink value="Download" action="#{appController.downloadFile}" rendered="#{!file.directory}">
   <f:param name="file" value="#{file.absoluteFilename}" />
</a4j:commandLink>
Run Code Online (Sandbox Code Playgroud)

AppController的:

public String downloadFile() {
    String filename = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("file");
    File file = new File(filename);
    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();  

    writeOutContent(response, file, file.getName());

    FacesContext.getCurrentInstance().responseComplete();
    return null;
}

private void writeOutContent(final HttpServletResponse res, final File content, final String theFilename) {
    if (content == null) {
        return;
    }
    try {
        res.setHeader("Pragma", "no-cache");
        res.setDateHeader("Expires", 0);
        res.setHeader("Content-disposition", "attachment; filename=" + theFilename);
        FileInputStream fis = new FileInputStream(content);
        ServletOutputStream os …
Run Code Online (Sandbox Code Playgroud)

java jsf jsp richfaces

6
推荐指数
1
解决办法
1万
查看次数

石英cron - 如果月中的某一天不存在怎么办?

我正在尝试为quartz scheduler编写一个简单的cron表达式.我希望这个工作每个月在凌晨3点凌晨3点运行.

0 0 3 30 JAN-DEC ? *
Run Code Online (Sandbox Code Playgroud)

我想知道二月份会发生什么?工作是否会运行?

我不是在寻找一个月的最后一天解决方案,我需要用户选择作业运行的月份(理想情况是所有月份一次).

java cron quartz-scheduler

5
推荐指数
1
解决办法
3160
查看次数

和投影和结果约束

我在db中有100个实体.我想通过前20个实体的某些属性得到总和

Criteria cr = getSession().createCriteria(Entity.class);
cr.setFirstResult(0);
cr.setMaxResults(20);
cr.setProjection(Projections.sum("propertyName"));
Double sum = cr.uniqueResult();
Run Code Online (Sandbox Code Playgroud)

但是条件返回所有实体的总和,因为setMaxResults(20)限制和值结果,这是一个对象 - uniqueResult.意味着建筑是完全正确的.如何正确使用标准获得几个实体的总和?

java hibernate

3
推荐指数
1
解决办法
7988
查看次数

在编译时嘲笑

我正在使用一些遗留代码,我需要测试一些昂贵的服务被调用(它会进行网络呼叫,发送电子邮件等).

我可以通过使用的框架(jboss seam 2)注入假服务而不是原始服务.看到这个问题:单元测试的Mock @ org.jboss.seam.annotations.in行为

我现在希望我的假对象是一个更聪明的模拟断言是否已被调用,等等.我希望它是一个Mockito或Easymock或其他一些模拟.但是,由于接缝2和接缝测试处理注射的方式,在测试中构建模拟经典方式然后注入它是不起作用的.请参阅上面的链接.

问题:有没有办法让我的模拟扩展或注释,以成为Mockito或模拟?如何在测试中获得对它的引用?

java integration-testing seam mocking mockito

2
推荐指数
1
解决办法
524
查看次数

创建类和接口的arraylist

我正在尝试创建一个ArrayList(所以java,显然)类型TileEntity(是的,这是一个Minecraft mod).但我还需要添加的对象ArrayList来实现某个接口.

想到的第一个选项是创建TileEntity该实现接口的抽象子类,并将其用作ArrayList类型.但是考虑到人们通常创建自己的子类TileEntity并将它们用作通常子类的类,并且我希望人们能够挂钩到我的mod中,我不能指望他们继承子类TileEntity.

我目前的解决方案是if(object instanceof MyInterface)在添加之前检查,但这看起来很难看.当然有一种方法可以设置一个类型,ArrayList要求一个对象既是一个子类TileEntity又是一个实现者MyInterface.

java generics arraylist

2
推荐指数
1
解决办法
2326
查看次数

TreeRangeMap时空复杂

我正在寻找guava TreeRangeMap,它似乎非常适合我对项目的需求.java文档说它基于(java标准?)TreeMap,它具有get(put和next)的O(log(n))时间.

但TreeRangeMap应该是某种范围树实现,根据这个SO问题,查询的O(k + log(n))时间复杂度为O(n)空间,k为范围大小?有人可以证实这一点吗?

我对TreeRangeMap.subRangeMap()操作的时间复杂性也很感兴趣.它是否具有相同的O(k + log(n))?

谢谢.

java time-complexity guava space-complexity

2
推荐指数
1
解决办法
722
查看次数

仿制药在返回时如何工作?

嗨,我正在写一个链表数据类型.我有一个内部类节点,我用它来存储元素和后继者.我目前在节点中的getElement和列表中的get方法遇到问题.这是节点中的getElement

public E getElement(){
  return this.element;
}
Run Code Online (Sandbox Code Playgroud)

其中element是E元素声明的实例变量.但是,当我尝试在我的获取方法中返回它时

    public E get(int index){
    Node current;
    if(index < 0 || index >= size)
      throw new IndexOutOfBoundsException();
    if(index == 0)
      return head.getElement();
    else{
      current = head;
      for(int i = 0; i< index; i++){

        current = current.getSuccessor();
      }
      return current.getElement();
    }
  }
Run Code Online (Sandbox Code Playgroud)

我得到的错误无法从对象转换为类型E.我可以破解它并键入将其转换为E但我觉得有一些关于泛型的基本问题,我缺少.如果您认为这是作业,那么您是对的,并提前感谢您.

java generics

1
推荐指数
1
解决办法
123
查看次数