Glassfish 3.1.1 泽西岛1.8
我将以下无状态会话bean公开为JAX-RS资源。 VehicleResource 包含在WAR中,其他EJB位于EJB-JAR中。整个应用程序打包并部署为EAR。
@Stateless
@Path("/")
@DeclareRoles({"production"})
public class VehicleResource {
private static final Logger logger = Logger.getLogger(VehicleResource.class.getName());
private static final long serialVersionUID = 1L;
@Context
private UriInfo uriInfo;
@EJB
private VehicleManagementLocal vehicles;
@EJB
private VehicleAliases aliases;
....
我有一个泽西岛客户端向宁静的服务请求。为每个请求创建会话。这是正常/预期的吗?对于许多请求,服务器快速耗尽内存。为什么会发生这种情况,是否有任何配置/代码更改可以阻止每个请求的新会话?
修改 实际上,只创建了一个会话bean实例。我通过反复点击URI来模拟负载。我已将会话超时更改为5分钟(从30开始)。会话现在过期,可以快速收集垃圾,以防止服务器内存不足。 glassfish监控部分的“Web容器:会话统计”显示我有~50,000个活动会话。
答案 0 :(得分:2)
为每个请求创建会话
你的意思是为每个请求创建一个新的无状态会话bean实例吗?如果是这样,如果您不希望这种情况发生,您可以使用@Singleton
注释会话bean。
此外,如果公开的服务是只读的,您可以使用@javax.ejb.Lock(READ)
对其进行注释,以提高并发性和性能。
最后,如果您不想使用单例但希望限制容器创建的实例数,请查看池大小设置:http://download.oracle.com/docs/cd/E18930_01/html/821-2418/beahx.html