我们的团队在IIS中托管了一个带有.NET c#后端的Android应用程序。最近,在以下情况下,我们观察到客户的突发性和无法解释的延迟:
我启用了“失败请求跟踪”日志,以查看是否可以从中获取任何信息,结果如下:
<failedRequest url="https://ourDNS.com:443/servertime.aspx"
siteId="1"
appPoolId="DefaultAppPool"
processId="22232"
verb="POST"
remoteUserName=""
userName=""
tokenUserName="NT AUTHORITY\IUSR"
authenticationType="anonymous"
activityId="{80013C53-0802-B500-B63F-84710C7967BB}"
failureReason="TIME_TAKEN"
statusCode="200"
triggerStatusCode="0"
timeTaken="45141"
xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
>
上述页面是一个简单页面,首先获取服务器的时区,然后获取客户的时区(可以从客户端手动设置),然后返回托管应用程序的设备的确切日期和时间,例如流程序的进一步计算,现在正在播放的内容等等。但是,对于此页面,返回一个带有字符串的简单JSON,它需要超过45秒的时间(对我来说这很疯狂)。目前,客户端发出的另一条日志是上述异常:
java.net.SocketTimeoutException
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:491)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191)
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
at com.framework.utilityframe.webhelper.HttpRequest.getHttpResponse(HttpRequest.java:316)
at com.framework.utilityframe.webhelper.HttpRequest.httpRequest(HttpRequest.java:393)
at com.tibo.webtv.web.TiboLog.logBufferingError(TiboLog.java:319)
at com.tibo.webtv.CustomVideoView$Buffering_Problem.doInBackground(CustomVideoView.java:324)
at com.tibo.webtv.CustomVideoView$Buffering_Problem.doInBackground(CustomVideoView.java:307)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
通过不同的论坛阅读,我发现了导致性能泄漏的不同原因,从数据库到IIS,甚至是应用程序的错误配置。我将数据库丢弃是有原因的,因为:
现在,如果我想到了IIS,托管在该AppPool上的每个应用程序都可以正常运行并且没有延迟,但是那边仍然可能缺少我的东西。至少,令我感到怀疑的是,移动应用程序与众不同解码器应用程序有两种方式:
如果有人遇到过类似的问题,将非常感谢他们的帮助。对于您需要的其他任何详细信息,只需询问即可,我会提供。
因此,今天,我们的团队进行了另一项测试,其中包括:
应用程序托管在一台服务器中,数据库托管在另一台服务器中
托管在完全不同的服务器(Azure环境)中的应用程序和数据库
在这两种情况下,结果都是相同的:服务的延迟和问题。问题既不在后端,也不在服务器上。首先,当将日志保存到另一台服务器时,Java应用程序错误地执行了“同步任务”(专用于此,它有潜力保留尽可能多的数据)。其次,日志服务器具有完整的HDD,只有超过1 TB的DB日志,因此,当应用程序执行那些同步任务(在与通道进行任何交互之前,这是第一次调用)时,它们会收到Socket异常。因此,也许对于可能看到此帖子的其他人:请,始终检查您的应用程序中的任务,并始终检查与您的应用程序相关的任何服务器!!!非常感谢你:D
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句