glassfish下的性能调优:令人极度困惑的Max Connections参数

近日做性能调优,主要是针对web service,运行于glassfish之上。前期通过修改优化代码,基本搞定一些阻碍性能的问题,主要是代码层次的不合理。
之后还是发现性能上不去,而且表现明显不合理:tps只能达到2k,而服务器cpu只停留在10%附近,压力测试的客户端cpu也不高,20%-30%吧。反复thread dump后检查无果,不论是服务器端还是客户端的工作线程都算正常,没有发现线程/锁之类的问题。分析发现主要的症状是服务器端和客户端都压不上去,服务器端工作线程很空闲,客户端则忙于socket通讯及等待服务器返回。

于是开始怀疑问题可能出现在网络通讯上,一边跑压力测试,一边用netstat命令查看socket状态,很快发现问题,有大量多大数k的socket连接出现。感觉不正常,因为应该用的是长连接,按说正常情况socket连接数应该近似等于并发的线程数。测试工具为客户端soapUI,直接连接到运行在glassfish上的web service. soapUI是支持长连接的,glassfish也是支持长连接的。

做了一下验证,只开一个工作线程,跑了几个请求,通过抓包工具发现的确是只建立了一个连接,后面的请求都是跑在同一个socket连接上。试着增加http header Connection: Keep-Alive,发现和默认没有这个参数时表现一致。故意设置为Connection: close,则每次请求都是重新建立连接。因此排除http 是短连接的问题。

继续回头看socket状态,发现出现的多达数k的socket有很多都是处于TIME_WAIT状态,只有少数处于正常的ESTABLISHED状态。TIME_WAIT意味着是服务器端主动要求close socket的,在长连接并且不断有请求的情况下,服务器为什么会如此频繁的关闭连接呢?

试着只开一个压力测试的工作线程,tps大概100+的情况下看服务器端的socket情况,很快发现问题:先是建立一个socket,ESTABLISHED状态,然后大概2s左右重新建立一个新的socket,原有的这个状态转为TIME_WAIT,之后每隔2-3秒左右,都会有上诉的情况出现—-原有连接被放弃,重建新的连接。这样socket就成了1 + n的状态:1个ESTABLISHED + n个TIME_WAIT,一定时间后TIME_WAIT的socket开始逐个消失。

将压力测试的工作线程加到100之后,上述情况开始变的极度激烈,大量TIME_WAIT的socket被建立,数目直接上到1w,2w乃至36000,之后开始偶尔报错说无法连接。

问题基本就定位在这里了,为什么明明建立好了长连接,服务器端确总是会不断的关闭这些长连接导致无数的TIME_WAIT?

试着查找资料,调整参数并反复测试,最终发现和两个参数有关:

1. http.maxConnections

glassfish官网说明
https://metro.dev.java.net/guide/HTTP_Persistent_Connections__keep_alive_.html

HTTP keep-alive behavior can be controlled by the http.keepAlive (default: true) and http.maxConnections (default: 5) system properties. For more information, see Networking Properties

进入http://java.sun.com/j2se/1.5.0/docs/guide/net/properties.html 页面查看相关的系统属性,最后聚焦在http.maxConnections :

http.maxConnections (default: 5)
If HTTP keep-alive is enabled, this value is the number of idle connections that will be simultaneously kept alive, per-destination.

从说明上看,应该是max idle connection,和命名maxConnections不大符合,maxConnections感觉像是最多容许开这么多长连接。考虑默认值为5明显应该是max idle connection。

后面的测试验证,就是这个参数非常的致命,在修改为200之后,tps直接 *2。

返回来分析这个参数,默认最多容许有5个空闲长连接。考虑到100个工作线程,正常应该长连接数目也在100附近,考虑每次请求都要先申请一个连接,用完之后再放回,100个工作线程同时操作,很有可能同时将超过5个的连接返还给连接池。如果服务器简单的判断说多于5个连接然后就立即close并释放长连接,那么就会出现一方面连续释放长连接,一方面因为连接数不够不停的创建新的长连接。

换言之,当100个线程并发在连接池中进行申请连接/返还连接的过程中,连接池内的可用连接数是时刻变化的,实际的数目会有大的波动。而默认的最大空闲参数过小(默认才5)使得这个波动有极大的几率突破限制,从而造成连接池进行不必要的释放所谓过多的“空闲”连接。

glassfish中,对于这个参数的修改,非常简单,在jvm参数中增加新的一项”-Dhttp.maxConnections=250″,重启即可。

2. maxKeepAliveRequests

前面的调整,虽然达到了tps * 2的良好效果,但是使用netstat查看socket时,还是发现有非常多的TIME_TIME状态的socket,只是数目没有原来那么直上3w那么夸张,大概稳定在2000附近。

看来还是有其他的原因的,重新回头看当时只开一个线程测试的场景:一个线程连续提交,会出现1个ESTABLISHED + n个TIME_WAIT。

感觉上像是一个长连接上只要跑一段时间或者一定的请求,socket就会被服务器端关闭。修改测试方法,让每次请求之间等待一段时间,降低tps,发现关闭连接的时间间隔大为增加。

后来google到maxKeepAliveRequests这个参数,对于tomcat,apache等服务器都有支持,解释如下:

maxKeepAliveRequests:
The maximum number of HTTP requests which can be pipelined until the connection is closed by the server. Setting this attribute to 1 will disable HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining. Setting this to -1 will allow an unlimited amount of pipelined or keep-alive HTTP requests. If not specified, this attribute is set to 100.

随即google到grizzly也有类似的系统参数可以设置这个maxKeepAliveRequests

-Dcom.sun.enterprise.web.connector.grizzly.maxKeepAliveRequests=-1
使用关键字”glassfish maxKeepAliveRequests”,发现glassfish还是有支持这个参数的,但是找不到具体设置的方法。后来在glassfish的控制台-> Configuration -> http service -> Keep Alive 下
发现了一个Max Connections参数,默认值250,解释为”Maximum number of connections in the Keep-Alive mode”,和maxKeepAliveRequests似乎完全不是一回事。

但是试着将这个参数修改为2500之后,非常惊讶的发现,见效了!单线程测试长连接释放的速度明显放慢,大体算了一下时间间隔和tpc,无论是之前的默认250还是现在新修改的2500都和测试结果
很合拍。开到100个线程测试,发现原有的2000附近的TIME_WAIT连接被降低到了大概300附近,明显改观。后面发现,可以用下面的参数直接设置:
asadmin set –user admin –passwordfile passwords.txt –port 47348 “server.http-service.keep-alive.max-connections=2500″

这里就有点奇怪了,从测试结果来看,这个参数的表现和maxKeepAliveRequests参数的功能是一致的,但是这个参数明明叫做Max Connections,而且旁边的注释”Maximum number of connections in the Keep-Alive mode”也证明了这点。很令人费解,并且这里的Max Connections前面的http.maxConnections有重名嫌疑而作用明显不同。

下面是一个简单的列表,其他情况相同下,分别修改者两个参数前后的对比:

keep-alive.max-connections http.maxConnections test result
250 5 TPS=650-700 TIME-WAIT=32600
250 200 TPS=1200 TIME-WAIT=300
2500 5 TPS=650-700 TIME-WAIT=32600
2500 200 TPS=1200 TIME-WAIT=300

最终的结果,还是比较理想的,修改了上述两个参数之后,cpu终于压上去了,tps也有了巨大的提升,而且TIME_WAIT的连接也大为减少。但是这两个参数的名称,注释和实际测试中的效果,都有名不副实的感觉,令人困惑。

后续更新:
1. 经同事提醒,有新的发现,maxKeepAliveRequests得以确认

http://docs.sun.com/app/docs/doc/820-4343/abefk?a=view
这里是sun的官方资料,其中对Max Connections 参数解释如下:
Max Connections

Max Connections controls the number of requests that a particular client can make over a keep-alive connection. The range is any positive integer, and the default is 256.

Adjust this value based on the number of requests a typical client makes in your application. For best performance specify quite a large number, allowing clients to make many requests.

因此可见这个”max connections”参数的确就是通常意义上的”maxKeepAliveRequests”。这里sun的命名不大合适,容易造成误解。
refer to:www.blogjava.net/aoxj/archive

本Blog文章除特别声明之外皆为原创文章,欢迎转载,转载请注明: 转载自JSSAY'S BLOG

本文链接地址: http://www.jssay.com/blog/index.php/2010/05/06/performance-tuning-glassfish-under-max-connections-is-extremely-confusing-parameters/

通过一个具体的例子,讲解 SAP Cloud Platform Integration(CPI) 的使用方法 最近笔者由于项目需要,又得学习一个新工具:SAP Cloud Platform Integration,简称 CPI,以前又叫做HCI - HANA Cloud Platform Integration Service.笔者想通过本文,把使用这个工具的第一手体会,分享给曾经用过SAP CRM中间件,但尚未有机会接触到CPI的朋友们。之所以本文标题里把SAP CRM中间件和SAP CPI关联在一起,是因为二者同广义上说,扮演的都是系统集成里中间件的角色。SAP ERP和CRM通过qRFC进行业务数据同步,而中 阅读详情

相关推荐

Nuvoton OpenTitan开源安全芯片技术解析与应用

硬件安全模块(HSM)作为可信计算基的核心组件,其设计透明度和可验证性正成为行业焦点。RISC-V架构凭借开源特性,为构建可审计的安全芯片提供了新范式。OpenTitan项目通过开放Verilog源码和形式化证明,实现了从物理不可克隆函数(PUF)到分层安全启动的全栈透明。该方案在lowRISC Voyager开发板上实测显示,安全启动时间小于200ms,性能损耗仅7%,显著优于传统黑盒方案。目前该技术已应用于Chromebook和数据中心,其40nm工艺版本更将功耗降至5μA待机水平,为物联网和边缘计算提

weixin_36303807的博客 399

请求链路各节点上,如何支持http1.1长连接(java技术栈)

请求端、反向代理、防火墙、web容器,都需要正确配置,才能保障http1.1长连接

wzp1986的专栏 2946

QtWebApp的使用【在Qt中搭建HTTP服务器】(一)

用Qt和QtWebApp能够实现在C++中开发HTTP Web服务器应用程序。 首先,需要先安装Qt的软件开发工具包。点此下载 其次,下载最新的QtWebApp库。点此下载 下载并解压缩QtWebApp ZIP文件。你将会看到: 如何使用QtWebApp 1)将QtWebApp.zip文件解压到文件夹中,并创建一个名为“ MyFirstWebApp”的新Qt控制台项目。然后,建立如下文件结构: 2)将以下行添加到MyFirstWebApp项目的项目文件中: QT += network include(

饭的笔记本 2万+

秒懂:tomcat的maxConnections、maxThreads、acceptCount 图解

怎么配置tomcat,才能使得自己的服务效率更高呢? 首先,这和tomcat的使用的IO模式有关 关于Java IO模式、以及IO处理的线程模型等基础的通信框架的知识,是Java程序员的重要、必备的内功,具体请参见尼恩编著的《Netty、Zookeeper、Redis高并发实战》一书,这里不做过多的赘述。 其次,也和tomcat的配置参数有关 尤其是以下三个配置项:maxConnections、maxThreads、acceptCount。 1.4.1 Tomcat的高效配置 Tomcat的maxConne

weixin_43831204的博客 921

ROS2前置基础教程 | 使用CMakeLists.txt编译ROS2节点

答案是有的,那就是cmake工具。cmake通过调用CMakeLists.txt直接生成Makefile。 2.新建CMakeLists.txt 在新建,输入下面内容。 3.编译代码 我们一般会创建一个新的目录,运行cmake并进行编译,这样的好处是不会显得那么乱。 创建好文件夹,接着运行cmake指令,代表到上级目录找。 运行完cmake你应该可以在build目录下看到cmake自动生成的Makefile了,接着就可以运行make指令进行编译 运行完上面的指令,就可以在build目录下发现节点了。ROS2

生活不止眼前的苟且 1万+

python特征选择pso_【来点干货】机器学习中常用的特征选择方法及非常详细的Python实例...

花费了很长时间整理编辑,转载请联系作者授权,违者必究。特征选择(Feature selection)是在构建预测模型的过程中减少输入变量的一个过程。它是机器学习中非常重要的一步并在很大程度上可以提高模型预测精度。这里我总结了一些机器学习中常见的比较有用的特征选择方法并附上相关python实现code。希望可以给大家一些启发。首先,我们为什么要进行特征选择呢?它有以下几个优点:减少过拟合:冗余数据常...

weixin_39927158的博客 1162

使用HttpClient访问固定几个网络资源的优化配置参数

使用HttpClient访问固定几个网络资源时,可以设置maxConnPerRoute,maxConnTotal,evictIdleConnections参数,通过重复使用已建立的连接来提高访问效率。

lieying411 1479

AGM Supra软件从零到一:国产CPLD工程创建全流程实战解析

本文详细解析了AGM Supra软件在国产CPLD开发中的全流程实战操作,从工程创建到代码开发、编译调试,再到高级技巧与疑难排解。特别对比了Supra与Quartus的差异,提供了工程路径管理、Quartus项目转换、HDL代码规范等实用技巧,帮助开发者高效完成CPLD项目开发。

weixin_29193259的博客 502

HttpClient的DefaultMaxConnectionsPerHost 坑

事件背景我在凤巢团队独立搭建和运维的一个高流量的推广实况系统,是通过 HttpClient 调用大搜的实况服务。最近经常出现 Address already in use (Bind failed) 的问题。很明显是一个端口绑定冲突的问题,于是大概排查了一下当前系统的网络连接情况和端口使用情况,发现是有大量 time_wait 的连接一直占用着端口没释放,导致端口被占满(最高的时候 6w+ 个),因此 HttpClient 建立连接的时候会出现申请端口冲突的情况。具体情况如下:于是为了解决 time_wai

嘻哈熊的专栏 1467

SIWAVE+ADS提取PCB走线寄生参数

本文将介绍一种很适合PCB走线提取寄生电感等参数的方法,即是通过SIWAVE将PCB走线的S参数提取出来,再通过ADS将S参数转换成电感、电容值。

sinat_15150363的博客 1765

第二节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - Python Flask 后端开发详解(附源码)

大家好,我是cuiwin!本节内容,我们从零开始开发基于Python(Flask)的后端项目,对接Vue Vben Admin(vben5)。登录mysql数据库执行: 创建数据库。

cuiwin的专栏 2264

Http——Keep-Alive机制

HTTP keep-alive 也称为 HTTP 长连接。它通过重用一个 TCP 连接来发送/接收多个 HTTP请求,来减少创建/关闭多个 TCP 连接的开销。1. HTTP中的keep-alive1.1 为什么HTTP是短连接众所周知,HTTP是短连接,client向server发送一个request,得到response后,连接就关闭。之所以这样设计使用,主要是考虑到实际情况。

lgq2016的博客 1383

24、虚拟地理信息系统:技术与应用的全面解析

本文全面解析了虚拟地理信息系统(虚拟GIS)的技术架构与应用前景。文章从地理空间数据的增长出发,探讨了虚拟GIS在地形、建筑、天气等多维度数据的交互式可视化技术,重点介绍了全球层次结构、多分辨率模型、缓存分页机制及交互导航方法。系统已应用于天气分析、城市规划、应急响应等领域,并展望了未来在数据处理、模拟操作、移动可视化及智能城市、文化遗产保护等方向的发展路径与技术挑战。

v4w5x6的博客 89

Spring Boot 3.4.13 + JDK 17 迁移实战:从架构重置到生产就绪

Spring Boot 和 JDK 是 Java 企业级应用的核心运行时基础。Spring Boot 3.x 强制要求 JDK 17+,标志着从传统 Servlet 容器、Parallel GC 到 Jakarta EE 9 命名空间、ZGC 与模块化 JVM 的代际升级。其本质不仅是版本更新,更是字节码规范(Class File Format 61)、API 契约(javax → jakarta)和内存模型的全面对齐。技术价值体现在低延迟(ZGC P99 <10ms)、强安全(TLS 1.3 原生支持)与

weixin_30653023的博客 430

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

常用 doc bat 命令总结

常用doc命令总结

sun0322 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

springboot(26)HTTP连接池

服务间基于HTTP通信相对于grpc、dubbo之类的通信效率要低得多,一方面是后者的传输数据结构紧凑,使用了序列化和压缩;另一方面,后者使用了TCP连接池,而前者默认情况下每一次服务间的通信会创建一个新的HTTP请求,会产生不小的性能消耗,对于需要额外非对称加密的HTTPS请求,性能消耗更加严重。 非连接池 默认情况下springboot的RestTemplate使用的org.springfra...

祈雨v的博客 6065

HTTP长连接小议

尝试翻译片技术文章。 What is HTTP Persistent Connections? HTTP persistent connections, also called HTTP keep-alive, or HTTP connection reuse, is the idea of using the same TCP connection to send and receive

wdrich的专栏 776

SpringBoot maxConnections、maxThreads、acceptCount解析

详解:maxConnections、maxThreads、acceptCount tomcat中maxConnections、maxThreads、acceptCount的具体含义是什么呢?参考官方文档,对三者的含义说明如下: 一、accept-count:最大等待数 官方文档的说明为:当所有的请求处理线程都在使用时,所能接收的连接请求的队列的最大长度。当队列已满时,任何的连接请求都将被拒绝。accept-count的默认值为100。 详细的来说:当调用HTTP请求数达到tomcat的最大线程数时,还

Leon_Jinhai_Sun的博客 2061

高并发场景下的 HttpClient 优化方案,QPS 大大提升!

来源:blog.youkuaiyun.com/u010285974/article/details/85696239伙伴做前后端分离项目,手摸手教学,后端 + 前端全栈开发,从 0 到 1 手敲,1v1 答疑,直到项目上线,后续上新更多项目,戳我加入HttpClient优化思路:池化长连接httpclient和httpget复用合理的配置参数(最大并发请求数,各种超时时间,重试次数)异步多读源码1.背景我们有...

犬小哈 161

glassfish连接数问题 domain.xml配置最大连接数

glassfish的web控制台进不去的情况下可以直接在 /glassfish/domains/domain03/config 路径下的domain.xml文件进行修改,前提是你得知道具体的配置地方,max-pool-size=“500” 这个地方是配置glassfish连接数据库的最大连接数。 然后还需要再看下oracle数据库的最大连接数 查询oracle的当前连接数 select count(*) from v$session; 查看数据库允许的最大连接数 select value from v$

weixin_42417886的博客 411

struts2 fileUpload 和 glassfish 上载文件限制修

struts2 上载文件基于 Apache FileUpload 组件,在导入 FileUpload 后,小文件上载正常,但上载大文件时却发现,有2M字节的限制,查询 struts2 官方信息得知需要修改 struts.xml 进行设置,故作一下调整,将其设置为20M。 &lt;struts&gt; &lt;constant name="struts.multipart.maxSi...

NULL BLOG 1044

HttpURLConnection的警告

这段代码对您来说还不错吗? HttpURLConnection connection = null; try { connection = (HttpURLConnection) url.openConnection(); try (InputStream in = url.getInputStream()) { return streamToString(in); ...

最佳 Java 编程 345

springboot tomcat最大连接数、最大排队连接数、最大线程数设置

1. server.tomcat.accept-count=100 连接数达到最大时,允许排队的最大连接数(Maximum queue length for incoming connection requests when all possible request processing threads are in use.),默认为100; 2. server.tomcat.max-connections=8192 最大连接数(Maximum number of connections that .

fubicheng208的博客 3969

优化 GlassFish

优化 HTTPConnector Grizzly  GlassFish 的 HTTPConnector、Grizzly 默认将使用 NIO 处理客户机请求的连接。New Input/Output (NIO) 是 JDK 1.4 引入的 IO 机制,它提供了可伸缩的网络的文件 IOI,以及本地缓冲管理功能。NIO 引入了通道(channel)的概念,允许流(stream)成为通道。Socke

独自登高楼 望断天涯路 4636
上一篇: XCode4添加Framework的方法
下一篇: Automaticlly install mysql ree rails on Amazon EC2 Amazon Linux
xinlanzero
博客等级 码龄25年 10粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值