java 接口请求访问阻塞问题

做了一个接口,查询mongdb的,然后根据日志分析发现有个别请求非常慢,甚至主键查询都要几分钟了,通过生产实测,了解 到当时其实据库压力并不大,而且相同的条件直接用sql跑还是1秒左右返回的,就是在用接口调用的时候,一直在等待请求进入,导致最后返回耗时比较长,请问这个该怎么优化,优化方向在那里,谢谢各位大佬了

4个回答

一、同步阻塞

这是早期Linux常用的IO方式,在这个模型中,用户空间的应用程序执行一个系统调用,这会导致应用程序阻塞。这意味着应用程序会一直阻塞,直到系统调用完成为止(数据传输完成或发生错误)。调用应用程序处于一种不再消费 CPU 而只是简单等待响应的状态,因此从处理的角度来看,这是非常有效的。图 1 给出了传统的阻塞 I/O 模型,这也是目前应用程序中最为常用的一种模型。其行为非常容易理解,其用法对于典型的应用程序来说都非常有效。在调用read系统调用时,应用程序会阻塞并对内核进行上下文切换。然后会触发读操作,当响应返回时(从我们正在从中读取的设备中返回),数据就被移动到用户空间的缓冲区中。然后应用程序就会解除阻塞(read调用返回)。

\

图1 同步阻塞方式

二、同步非阻塞 I/O

同步阻塞 I/O 的一种效率稍低的变种是同步非阻塞 I/O。在这种模型中,设备是以非阻塞的形式打开的。这意味着 I/O 操作不会立即完成,read操作可能会返回一个错误代码,说明这个命令不能立即满足(EAGAIN或EWOULDBLOCK),如图 2 所示。

\

图2 同步非阻塞方式

非阻塞的实现是 I/O 命令可能并不会立即满足,需要应用程序调用许多次来等待操作完成。这可能效率不高,因为在很多情况下,当内核执行这个命令时,应用程序必须要进行忙碌等待,直到数据可用为止,或者试图执行其他工作。正如图 3 所示的一样,这个方法可以引入 I/O 操作的延时,因为数据在内核中变为可用到用户调用read返回数据之间存在一定的间隔,这会导致整体数据吞吐量的降低。

三、异步阻塞方式

另外一个阻塞解决方案是带有阻塞通知的非阻塞 I/O。在这种模型中,配置的是非阻塞 I/O,然后使用阻塞select系统调用来确定一个 I/O 描述符何时有操作。使select调用非常有趣的是它可以用来为多个描述符提供通知,而不仅仅为一个描述符提供通知。对于每个提示符来说,我们可以请求这个描述符可以写数据、有读数据可用以及是否发生错误的通知。

那就看看接口调用的相关日志,是不是服务器接口处理不过来在等待任务

oyljerry
oyljerry 还要看看Tomcat日志等。具体时间花在哪
一年多之前 回复
big_bow
big_bow 已目前的并发量来说tomcat,和数据库 连接数也给绝对够用,而且tomcat是Nio的连接方式,但是就是在接口请求的时候,一直等待很长时间才会有返回
一年多之前 回复

看下是不是查询的量比较大,然后回写的时候超时了呢?再一个就是调试跟进一下代码逻辑,应该是在加工的时候有什么延迟。
或者地柜,或者循环,或者存取集合数据上。希望能够帮助到你

big_bow
big_bow 查询量都不大的,就是字段有点多把,但是也是一页20条,主键查询也才1条的
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于请求阻塞的问题
目前我做的是一个网站统计模块 具体的技术实现是rn 1 使用JS做来捕获网站的点击率rn 2 在页面中嵌入该JS代码。rn 3 JS将页面的请求派发给一个servlet请求对像 , 由该Servlet对像来对请求做出响应rn 4 servlet将页面请求中的数据存入缓存中rn 5 一个定时任务将在每隔一断时间后将缓存中的数据存入数据库中,再实现清缓存的功能(没有做同步)rn rn我不知道这样做是否合理: 现在最重要的一个问题是:rn 我现在做了一个压力测试, 1 每隔十毫秒请求一次 。 2 同时打开十个这样的测试页面rn 现在问题出来了: 请求被阻塞了!!rnrn 请教各位大侠: 小弟这样做是否有哪个环节出错了? rnrn rn rn
大数据访问阻塞问题
我在WINDOWS SERVER 2003 企业版(SP2)上安装了SQL SERVER 2005 企业版,相关服务均开启,从客户端访问(数据量大时)会出现阻塞,造成客户端假死机,长时间无反应,只得通过任务管理器来结束应用程序。我的访问方式为:C/S模式,以前在WIN2000、SQL 2000环境下无此问题。请高手们帮我找找原因,先谢了。特别说明:当访问的数据量少时是正常的(几千条记录时)。
post请求访问http接口
public static String post(String open_id) { String responseMsg = ""; HttpClient httpClient=new HttpClient(); httpClient.getParams().setContentCharset("UTF-8"); String url="http:......
java 访问url接口问题
[code=java]rnURL url = new URL(urlString);rnHttpURLConnection conn = (HttpURLConnection) url.openConnection();rnconn.connect();[/code]为什么我直接这么写,发送不过去rn[code=java]rnURL url = new URL(urlString);rnHttpURLConnection conn = (HttpURLConnection) url.openConnection();rnconn.connect();rnconn.getResponseCode();[/code]rn就加了一句conn.getResponseCode();就能发送过去了,感觉这句话并没有什么用啊
java post 请求接口
public static JSONObject doPost(String url,JSONObject json){         DefaultHttpClient client = new DefaultHttpClient();         HttpPost post = new HttpPost(url);         JSONObject response = null; ...
java接口请求工具类
Maven添加第三方类库在这里我传的参数是Json格式的。下面是java代码:   /**     * 招标接口输入参数,post请求     *     * @param json     * @return     */    public static JSONObject doInvitePost(String url, TimersInviteInfo timersInviteInfo)...
ajax请求后台阻塞问题
写了两个AJAX函数,第一个用于导入数据,同时将进度信息写到全局变量中,第二个每隔一秒种获取全局变量的进度信息rnrn但是为何第二个ajax一定要等到第一个结束时才会去执行?rnrn1. 设置过jquery AJAX的async 为te,即异步执行rnrn2. 第二个ajax(获取进度信息的), 就算我随便返回个值(非session)里面的都不会去调用后台方法, 直到第1个执行完成才会进来。 也不是session的问题。。。rnrn那么真的很奇怪啊, 大神速来~~~
关于音频播放接口阻塞的问题
waveOutPrepareHeaderrnwaveOutWriternwaveOutUnprepareHeaderrn用的这3个API接口,正常情况下是可以播放的,但播放的工程中如果对计算机的音频设置进行更改,可能会造成这3个函数中的一个阻塞,请问有什么办法让其继续往下执行或返回错误,而不是堵在那里,感谢啊!
接口获取数据库连接阻塞问题
问题描述 接口URL:http://192.168.10.200:20200/h5-customer/customer/card/consumerCard/submit?cardId=card_20171010210403659539&cityCode=110100&token=lOukBdwqvVBOpj9EUPiA 在压测提交充值卡订单接口,在并发数200情况下,jmeter 图表
JAVA 访问别人的接口。
public class Test1111 {    public static void main(String[] args) throws Exception {        //这里写你要访问的url地址        String url = "www.baidu.com";        //参数        String param1 ="liu";        String ...
servlet请求阻塞怎么办?
两个ajax同时向后台请求数据,servlet收到请求后只会先执行完毕一个请求之后,才会执行另一个请求的方法
java请求接口返回值与跳转页面问题
(以spring mvc为例) 两种请求方式:form表单提交与ajax异步请求(或直接post) 一:form提交     可以在后台跳转页面,没有返回值,后台接口中直接用返回值即可跳转,如请求 test.htm接口:     @RequestMapping("/test.htm")  private String goodsType(HttpServletResponse res
java请求https接口证书验证问题
1,通过重新定义X509TrustManager证书管理器可以解决相关问题。 @Test public void testToken() throws KeyManagementException, NoSuchAlgorithmException{ String body = ""; //采用绕过验证的方式处理https请求 SSLContext ssl...
java多线程阻塞问题
主线程在启动两个子线程后,进入死循环进行轮询操作,然后sleep了30秒。rn现在问题是主线程有时会被永久阻塞,sleep时间到了,但是主线程没有任何的轮询输出了。rn感觉是主线程sleep时间到时,子线程正在执行结果就发生以上情况。rnrn请教发生的原因和解决办法。
java 多线程阻塞问题
为什么多线程在阻塞的时候不能核查共享变量?rn比如由于run()方法里有个循环,循环内容是sleep(),时间过了之后不就又可以运行了?
java Socket阻塞问题
一、问题描述 客户端接收消息的时候,如果服务端没有发送数据过来,在读取数据的时候会被阻塞,停在这步不进行下去。reader.read(chars)我调试的时候,发现,socket连接成功,并且在接收线程的地方设置断点的时候可以正常接收到消息,如果不设置断点就无法接收到消息,说明在什么地方被阻塞了。就找到是上面的原因。 二、代码实例 两个线程,输入和输出new Thread(tKeepThrea
JAVA http请求接口数据
本次以访问百度地图服务API 为例   编写访问程序  一、解析url 方法  把返回数据 封装成StringBuffer 字符串 public static StringBuffer httpsRequest(String requestUrl, String requestMethod, String output) throws IOException,
java请求其它项目接口
懒得说什么了,项目需求,之前用公司自己封装的api实现了,感觉挺简单的,两行代码就完成一次请求,就是不太灵活,这里用常用的方法再写一个,比较简单,容易理解。 package com.net.utils; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Array...
Java 接口请求异步响应
背景:接口请求的时候如果是同步,那么有时业务逻辑处理时间很长,请求就会超时! 所以需要在接口请求过来时,就先响应,再去执行业务逻辑。 1.创建一个Controller类用来接收接口请求 @RestController @RequestMapping("/test") public class Controller { private static Logger log = Logg
java 计算接口的请求的时间
思路都是将date转成long类型进行减操作 方法一: LocalDateTime beginTime = LocalDateTime.now(); Long timeConsuming = Duration.between(between,LocalDateTime.now()).toMillis(); 方法二: Long beginTime = new Date().getTime(...
访问Http接口的两种请求方式
1. POST方式请求 public void testPostLogin() throws Exception{ String url = "http://192.168.1.160:8080/app/user/login.xhtml"; Map paramMap = new HashMap(); paramMap.put("username","ting");
springboot 获取访问接口的请求的IP地址
工具类: import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; /** * @Author : JCccc * @CreateTime : 2018-11-23 * @Description : * @Poi...
java 访问 xml 文件的问题,请求帮忙
xml (student)文件如下:(随便写一个的)rnrnrn rnrnrnjava 文件如下:(这里没装到 java 软件,没通过编译的)rnrnimport org.w3c.dom.*;rnimport org.xml.sax.*;rnimport java.io.*;rnimport org.apache.xerces.parsers.*;rnrnpublic class Testrnrn public Test()rn rn BufferedReader buffer=BufferedReader(new FileReader("student.xml"));rn DOMParser parser=new DOMParser();rn parser.parse(new InputSource(buffer));rn Document document=parser.getDocument();rn rn NodeList nodelist=document.getElementsByTagName("*");rn rn rnrn public static void main(String[] args)rn rn new Test();rn rnrnrnrnrn我现在想在 后加多一个节点,应该使用 appendChild(newChild) 这个方法,但怎么我一用就有错呢.?rnrn现在想请下高手帮忙重写一下代码,可以使用到 appendChild(newChild) 方法添加新的节点.谢谢.
浏览器请求队列机制-请求为什么会阻塞
前言最近遇到一个问题,我1个站点链接2个后端服务,但1个后端服务有问题,导致访问超时,但请求接口都是分开的。自认为一个服务站点请求超时,不会影响到另外一个请求的,但不是。全部请求都发不出去。为什么呢?是不是浏览器有请求机制管理?正常情况前端站点都是对应一个服务的,如果前面一个请求有问题,那么后面一个请求访问不下去也正常。请求都是瀑布型一个请求接一个请求有关联的。所以不了解也没什么问题。但多个后端服务
java访问http请求工具类
package *; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; impor
Java使用socket接收http请求,read方法阻塞的问题
在socket通信中,服务端socket往往会使用socket.getInputStream.read()或socket.getInputStream.read(buffer)去读取客户端的请求内容,而且仅当read方法返回-1时,服务端socket才认定已经没有更多的东西可读了,这个在java doc可以看到 * @return the next byte of data,
菜鸟的关于CSocket阻塞的问题,请求帮助!!!
小弟初学网络编程,以下代码为程序中的一段,其中length为接收数据包的长度,肯定大于1024,m_socket为CSocket派生类的变量rnrnchar *buf=new char[length]rndornrnint temp=m_socket.Receive(buf,1024);rnlength-=temp;rnrnwhile(length>0)rnrn程序在慢网下执行时有时会失去响应,应该是出在receive函数上,我试过ioctl函数设置m_socket为非阻塞,但无效,请问改如何解决?rnps:请不要提供多线程编程的解决方法
请求接口
各位大侠 谁给我写几行简单的调用对方的接口的代码 是有返回值的 比如接口是,rul=http"//sfsd.fe.edf/.com"rnrn是用webrequest 还是用socket呢 那个比较好点
关于接口访问的问题!
我写了一个数据访问类:rnrnDataProvider.cs:rnrnpublic DataSet aaa()....rnrnrnrn他实现的接口是:rnrnIDbProvider.cs:rnrnDataSet aaa();rnrn请问我如何访问该IDbProvider.cs接口的aaa()呢???rnrnrn我是如此写的:rnrn添加了一个Dbprovider.cs类:rnrnpublic class DbProviderrn rn private DbProvider()rn rn rnrn static DbProvider()rn rn rn dp = (IDbProvider)dp;rn rn rnrn private static readonly IDbProvider dp = null;rnrn public static IDbProvider Instance()rn rn return dp;rn rn rnrnrn然后这样在其他类访问:rnrnDataSet ds = DbProvider.Instance().aaa()rnrn为什么不行呢?rnrn请帮忙,分不够加就是!谢谢
local接口访问问题
JB9+weblogic8,访问ejb local接口:rnrn//ejb-jar.xml:rnrnrn ref of localrn kkrn Sessionrn projectlawofficeoa.userAccountLOOALocalHomern projectlawofficeoa.userAccountLOOALocalrn userAccountLOOArnrnrn//jsp code:rn userAccountLOOALocalHome lclhm =rn(userAccountLOOALocalHome)cntxt.lookup("kk");rnrn//error:rnError 500--Internal Server Error rnjavax.naming.NameNotFoundException: Unable to resolve 'kk' Resolved ; remaining name 'kk'rn at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:186)rn at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:284)rn at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:244)rn at weblogic.jndi.internal.ServerNamingNode_WLStub.lookup(Unknown Source)rn at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:337)rn at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:332)rn at javax.naming.InitialContext.lookup(InitialContext.java:347)rn at jsp_servlet.__validate._jspService(__validate.java:150)rn at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)rn at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)rn at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)rn at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)rn at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6291)rn at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)rn at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:97)rn at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3575)rn at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2573)rn at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178)rn at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)rnrn什么地方错了?rn rn
Java NIO——阻塞与非阻塞
1.NIO的非阻塞式网络通信: 什么是阻塞式网络通信: 什么是非阻塞式网络通信: NIO网络通信的三个核心: 用于网络的通道: 2.阻塞式: 客户端: 服务端:   3.非阻塞式: 客户端: 服务端:  ...
访问接口的问题
一个认证系统提供了些许的接口,这个接口中有些许的功能,要测试这些接口时,出现以下异常:rn1、java.net ConnectException:Connection timed out:Connectrn2、java.net NoRouteToHostException:No route to host :Connectrn这些异常应该都是和通信有关吧?该如何处理?
接口变量访问问题
interface Irn int n=3;rnrnclass Test implements Irn int n=2;rnrn两个变量n重复,请问怎么表示这两个n?
关于访问接口问题
一财务系统欲访问一业务系统数据,在此业务系统中么样写接口?
一个接口访问的问题
接口地址:[url=http://www.wanhai.com/views/quick/cargo_tracking.xhtml][/url]rn[img=https://img-bbs.csdn.net/upload/201807/05/1530798493_722069.png][/img]rn[img=https://img-bbs.csdn.net/upload/201807/05/1530798537_14893.png][/img]rn第一张图是接口打开的样式,注意html中有个随机值(每次界面打开这个值都是不同的);rn第二张图是点击第一张图上的查询按钮后得到的结果(查询请求的参数中就有上面这个随机值)rnrn现在的问题是我用post请求这个接口的时候,第一次成功请求后得到这个随机值了,把这个值作为参数再次请求的时候,又是请求到第一次返回的结果,只是这个随机值变了,请求不到结果(第二个界面的内容)。我感觉好像是第二次请求就好像刷新了这个界面。rnrn我相信这个版块里面肯定有知道怎么解决这个问题的大神,所以就发到这来了。(其他板块很少去逛[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif][/img])rnrn希望明天起来,这个问题可以搞定,搞了一天了,头都大了。(小弟在这先感谢各位大神了)
android访问Java接口404
网页能打开那个访问的URL,并且浏览器能输出json,但是android上访问,tomca的log却显示404
java访问联图接口
构造联图接口url private String getQRCodeUrl(String text, String logoUrl, int size) { StringBuilder sb = new StringBuilder("http://qr.liantu.com/api.php?text="); sb.append(text); sb.append("&lo...
java访问接口直接访问网址
package com.alphasta.cms.syhanbaopingtai.action;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java....
java访问其他项目接口
现在调用其他项目的接口用的比较多的应该是webservice和httpclient这类的吧,我现在做的项目还是比较老的那种,用的还是java自带的包里面 的HttpURLConnection类,HttpURLConnection位于rt.jar下的 java.net下 public String loadJSONFforISP(String url) { StringBuild...
发送的阻塞请求被aborted
我想做在线聊天,通过客户端发送ajax请求,后台while循环阻塞住,直到数据库有新记录,才返回。好像浏览器默认会把这种请求给aborted。请指教
相关热词 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天 c#func链接匿名方法 c#怎么创建文件夹 c#从键盘接收空格 c#da/ad c#部门请假管理系统 c#服务器socket c# 默认的访问修饰符