用jdk 自带的endpoint 发布webservice,发布后内存会溢出,本来以为自己代码问题,但是搞了很久,还是不断溢出,后来写了个最简单的endpoint 测试,开启的时候内存只有20m+,不断请求后内存也不断增大。
简单的webservice
@WebService
public class Ws{
public void a(){
sysout("123");
}
public static void main(String[] args){
Endpoint.publish("http://0.0.0.0:7900/ws", new Ws());
}
}
JAX-WS endpoint 发布webservice内存溢出
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-08-07 00:41关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
在使用Java和JAX-WS时,确实可能会遇到内存泄漏的问题。这可能是因为你尝试了过多的并发操作或者你的服务过于复杂导致的。为了解决这个问题,你可以采取以下措施:
- 使用
EndpointFactoryBean类来创建一个EndpointFactory实例。 - 在这个工厂中,你可以设置一些参数,例如
maxThreads(最大线程数)和minSpareServers(最少空闲服务器数量),以限制服务端的数量。 - 适当减少并发请求的数量,或者采用更有效的并发处理方式。
以下是修改后的代码示例:
@WebService(endpointInterface = "com.example.ws.Ws") public class Ws { public void a() { // 这里可以添加更多复杂的逻辑 System.out.println("Hello, world!"); } } @Configuration public class AppConfig { @Bean public EndpointFactoryBean wsEndpointFactory() { return new EndpointFactoryBean(); } @Bean public Endpoint endpoint() throws Exception { EndpointConfig config = new EndpointConfig(); config.setPort(7900); config.setAddress("http://0.0.0.0:" + config.getPort()); config.setMaxInflightOperations(1); // 设置最大在线连接数为1 config.setThreadCount(5); // 设置每个线程的最大并发连接数为5 config.setMinSpareServers(2); // 设置最小空闲服务器数量为2 config.setMaxSpareServers(4); // 设置最多空闲服务器数量为4 EndpointFactoryBean factoryBean = new EndpointFactoryBean(config); factoryBean.setTargetObject(this); factoryBean.afterPropertiesSet(); return factoryBean.createEndpoint(); } }在这个例子中,我们设置了
maxInflightOperations为1,这意味着只有一个在线连接,这样应该可以避免内存泄漏。此外,我们还设置了threadCount、minSpareServers和maxSpareServers,这些参数可以帮助我们控制并发请求的数量。解决 无用评论 打赏 举报- 使用