Vaadin中大型系统的内存占用

Yar*_*dov 18 performance vaadin

我在金融领域工作,我们即将选择Vaadin 7开发大型重载系统.

但是,由于Vaadin保持所有州的会议,我对大型系统的Vaadin内存占用有点担心.这意味着对于每个新用户,所有应用程序状态都将存储在内存中,不是吗?
我们无法构建单一系统 - 系统必须具有可扩展性和灵活性.由于我们拥有庞大的客户群,因此必须易于定制并随时准备发展.

任何人都可以分享经验和可能的解决方法如何最小化或消除Vaadin中的这些问题?

Ali*_*pou 14

在我们的产品开发过程中,我们使用默认的Vaadin架构面临着大量内存占用的问题.

Vaadin架构基于事件驱动的组件.使用组件非常简单,可以创建紧密耦合的应用程序.原因是组件被构造成层次结构.这就像金字塔.构建了更大的应用程序; 较大的金字塔存储在每个用户的会话中.

为了显着减少内存分配,我们使用旧的学校状态管理在后台为应用程序创建了基于页面的方法,并使用了全面的事件模型.它基于XML格式的Statechart表示法.

因此,会话在用户工作流程期间仅保留访问过的页面,由状态图配置描述.当用户完成工作流程时,所有页面都被释放以由垃圾收集器收集.

为了看到差异,我们做了一些测试来比较为使用该应用程序的用户分配的内存.

开发的应用程序:

  • 紧密耦合的方法每个用户消耗5到15MB的堆
  • 使用松散耦合方法 - 最多2 MB

我们对结果非常满意,因为它让我们可以使用4GB RAM扩展大型系统,每台服务器可以达到1000-1500个并发用户.

差点忘了.我们使用了Lexaden Web Flow库.它是Apache许可证.


Ond*_*sky 9

我想你应该看看:https://vaadin.com/blog/-/blogs/vaadin-scalability-study-quicktickets

另外,我在生产中运行Vaadin的人发现了以下信息.

BalázsHódossy:

我们有一个拥有超过10,000名用户的后台系统.每日用户数约为3000,但其中一半使用系统8小时没有注销.我们使用Liferay 6.0.5 Tomcat bundle和Vaadin作为portlet.我们的两台服务器有48 GB RAM,我们给Tomcat 24 GB堆.DB得到18 GB,其余的系统.测量堆到会话大小,并发用户和活动.更多内存导致更少但更长的完整GC.我们计划增加Tomcat worker的数量并减少堆.测量服务器时,请尝试添加更多内存.如果成本比降低处理器成本和购买更多RAM那么重要.大多数时候,通过一些调整是有价值的.

Pierre-Emmanuel Gros:

对于1000天用户大量使用,纯vaadin应用程序:服务器3 gb 2核心Jetty与ulimit到50000 Postgresql 9与50个concurent用户(使用连接池).作为软件的一部分,我还使用了ehcache来缓存DTO对象和纯JDBC.