小编Tom*_*mmo的帖子

Tomcat逐渐耗尽内存,部署了WebSocket应用程序

我在一个AWS盒子上运行Tomcat 8.5.9,部署了10个不同的WebSocket应用程序,每个应用程序基本上都充当了消息代理.https连接器正在使用Http11NioProtocol.我设置的唯一参数是maxThreads = 200以及证书信息.

请求量不是很高.它从周一早上开始运行,这是经理状态所说的:

最大线程数:200
当前线程数:38
当前线程忙:0
保持活动套接字计数:1
最大处理时间:234 ms
处理时间:17.254 s
请求计数:33351
错误计数:325
字节收到:0.00 MB
字节发送:34.07 MB

几天后,我注意到内存使用量继续增长.我必须每两周左右重启一次Tomcat服务,以防止出现OutOfMemoryException.

我一直在使用Eclipse MAT进行堆转储和分析,它始终指向WsFrameServer类是可疑问题.最新的转储显示以下内容:

5,146个"org.apache.tomcat.websocket.server.WsFrameServer"实例,
由"java.net.URLClassLoader @ 0x6c0047c28"加载,占用1,383,143,200
(73.13%)个字节.这些实例是从
"java.util.concurrent.ConcurrentHashMap $ Node []"的一个实例引用的.

Dominator Tree目前有106,000个条目,其中大部分是WsFrameServer类.

我做错了什么还是这个"正常"?Tomcat或连接器上是否有任何特定设置我应该设置以防止这种情况发生?

提前致谢.

编辑:我不确定这是否有用,但这是VisualVM监视器的样子:

VisualVM监视器

java memory tomcat websocket eclipse-mat

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

JavaFX - 限制TextArea行?

在Swing中,我创建了一个自定义文档,它能够确定并限制TextArea中的行数,无论是换行还是换行.我希望在FX中找到类似的东西,但一直没能.有关如何处理限制允许的行数的任何建议?

编辑:这就是我试图弄清楚TextArea中包含多少行的方式.最大的问题是获得准确的宽度传递到setWrappingWidth,因为TextArea的内容上似乎有一些填充以及边框.

Text helper = new Text();
helper.setText(text);
helper.setFont(getFont());
helper.wrappingWidthProperty().bind(widthBinding);
Font font = getFont();
FontMetrics fontMetrics = Toolkit.getToolkit().getFontLoader().getFontMetrics(font);
int preferredHeight = new Double(helper.getLayoutBounds().getHeight()).intValue();
int lineHeight = new Double(fontMetrics.getMaxAscent() + fontMetrics.getMaxDescent()).intValue();
System.err.println("preferredHeight / lineHeight: " + preferredHeight / lineHeight);
return preferredHeight / lineHeight;
Run Code Online (Sandbox Code Playgroud)

java textarea javafx limit maxlength

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

在Swing应用程序中制作JavaFX警报/对话框模态

因此,我们再次将使用完全Swing的现有Java应用程序转换为使用JavaFX.但是,该应用程序将不会完全使用JavaFX.这似乎导致了警报/对话和模态的一些问题.我们目前正在使用Java 8u40.

主应用程序基本上是一个带有菜单的JFrame.主内容窗格是JDesktopPane,单击MenuItem会在DeskopPane中打开新的JInternalFrame.我们转换为JavaFX的屏幕目前基本上是JInternalFrame中的JFXPanel.从JFXPanel打开的任何警报/对话框都是面板本身的模态,但不是JInternalFrame,DeskopPane,Menu等.

我在DialogPane文档中读到他们计划在JavaFX的未来版本中引入一些轻量级对话框甚至可能是InternalFrames,所以我们可能只需要等待一段时间才能实现这一功能.但是,理想情况下,在打开新的警报/对话框时,它将是整个应用程序的模态.

编辑:目前正在为模态对话框执行以下操作:

((Stage)getDialogPane().getScene().getWindow()).setAlwaysOnTop(true);
Run Code Online (Sandbox Code Playgroud)

这使对话框始终显示在顶部,但即使我们的主应用程序已最小化,对话框也仍保留在其他应用程序之上.它也不会阻止对帧中任何Swing组件的输入.

swing alert javafx modal-dialog jdesktoppane

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

JavaFX从另一个打开一个对话框

我的应用程序中有以下工作流导致问题:

单击按钮打开对话框>打开对话框>单击按钮从对话框>显示确认警报>确认后关闭第一个对话框并打开一个新对话框

第二个对话框不允许输入TextField.我已经包含了一个显示问题的SSCE.另外一个奇怪的事情是,如果您尝试通过单击"X"关闭第二个对话框,然后关闭警报,那么我可以键入字段.

public class DialogTest extends Application {

  @Override
  public void start(Stage primaryStage) {
    Button button = new Button("Show Dialog");

    VBox root = new VBox(10, button);
    root.setAlignment(Pos.CENTER);

    Scene scene = new Scene(root, 350, 120);
    primaryStage.setScene(scene);
    primaryStage.show();

    button.setOnAction(event -> {
      Dialog<Pair<String, String>> dialog = getDialog(scene.getWindow(), "Dialog 1", true);
      dialog.showAndWait();
    });
  }

  public static void main(String[] args) {
    launch(args);
  }

  public Dialog<Pair<String, String>> getDialog(Window owner, String title, boolean addButton) {
    Dialog<Pair<String, String>> dialog = new Dialog<>();
    dialog.setTitle(title);
    dialog.initOwner(owner);
    dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);

    if(addButton) …
Run Code Online (Sandbox Code Playgroud)

java alert dialog javafx

6
推荐指数
2
解决办法
5818
查看次数

如何使用Java SDK将目录与AWS S3同步?

我遇到了这篇文章https://aws.amazon.com/blogs/developer/syncing-data-with-amazon-s3/,这使我意识到了uploadDirectory()方法。该博客指出:“这小段代码将本地目录的内容与Amazon S3存储桶中的内容进行了比较,仅传输已更改的文件。” 这似乎并不完全正确,因为它似乎总是传输给定目录中的每个文件,而不是仅传输已更改的文件。

我能够使用AWSCLI的s3 sync命令执行所需的操作,但是目标是能够使用Java SDK进行此同步。是否可以使用Java SDK进行相同类型的同步?

java amazon-s3 amazon-web-services

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

中止AWS S3上传

我有一个小型Java程序,使用户能够上传/下载Amazon S3上的文件.我有一个"取消"按钮,想要在按下此按钮后取消传输.

看起来有一种abort()方法,当下载似乎工作,但我不知道如何中止上传.我正在使用TransferManager上传文件.我已经打过电话transferManager.shutdownNow()沿transferManager.abortMultipartUploads(),在S3管理控制台但文件仍显示为如果传输不中断.难道我做错了什么?

java upload amazon-s3 abort amazon-web-services

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

在Eclipse中查找重写方法的实例

说我有以下内容:

public class TextField {
  private String value = "";
  public String getValue() { return value; }
}
Run Code Online (Sandbox Code Playgroud)

和:

public class TextField2 extends TextField {
  public String getValue() { return value; }
}
Run Code Online (Sandbox Code Playgroud)

在Eclipse中是否有任何方法搜索getValue()在TextField2对象上调用的方法的实例?我假设答案是否定的,但我想问一下.

java eclipse

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

在DatePicker上隐藏日历按钮?

有没有一种简单的方法来隐藏JavaFX中DatePicker节点上的日历按钮?我们的一些日期不可编辑,日历按钮只是添加到字段的宽度.

javafx datepicker

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

TortoiseSVN和Subclipse图标没有用SVN更新?

我在网络共享上有一个存储库,在两台独立的机器上有工作目录.在更改我的本地工作目录并提交它们后,其他开发人员的计算机上的图标不会发生变化.

如果Dev转到Team> Synchronize with Repository,它会在Eclipse中的Synchronize视图中显示更改,但是如果项目与存储库不同步,我希望项目旁边的图标能够更改.

在Windows资源管理器中,TortoiseSVN也是如此.如果我们右键单击并检查存储库以进行修改,则会显示它们,但目录上的覆盖图标仍为绿色复选框.

我只是误解了我期望发生的事情,或者如果项目不再与存储库同步,是否有办法让这些图标发生变化?

java eclipse subclipse svn tortoisesvn

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

自JavaFX setter/getters以来的最佳实践是最终的?

在将Windows应用程序从Swing转换为JavaFX的过程中.例如,我们有很多自定义组件,它们先前覆盖了JTextField的mutator方法.在JavaFX中,这些方法被声明为final.我是否应该创建调用最终方法并在之前和之后修改值的包装器方法?我只是想确保从一开始就以正确的方式做到这一点.

编辑:我还将包括这样的事实:这些代码中的一些来自Java的旧版本.因此,某些事情可能不再是必要的.这是我们在自定义JFormattedTextField中使用的setText方法的示例:

__CODE__

java getter setter swing javafx

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