我们的团队在Android中有一个应用程序,在IIS中托管了.NET c#后端。 最近,我们通过以下方案观察了客户突然和无法解释的延迟:
我启用了失败的请求跟踪日志,看看我是否能从中获取任何内容,并且我的结果如下:
<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上托管的每个应用程序都运行良好且没有延迟,但仍然可能有一些我在那里缺少的东西 至少,让我怀疑的是,移动应用程序在两种方式上与解码器应用程序有所不同:
如果有人遇到类似问题,我们将非常感谢他们的帮助。对于您需要的任何其他细节,只需询问,我将提供。
答案 0 :(得分:0)
所以, 今天,我们的团队进行了另一项测试,其中包括:
应用程序托管在一个服务器和数据库中另一个
托管在完全不同的服务器(Azure环境)中的应用程序和数据库
在这两种情况下,结果都是相同的:服务中的延迟和问题。 问题既不在后端也不在服务器上。首先,在将日志保存到另一台服务器时,Java应用程序错误地执行了Sync Tasks(专用,完全有可能保留尽可能多的数据)。其次,日志服务器有一个完整的硬盘驱动器,只有超过1 TB的DB日志,因此当应用程序执行那些同步任务(作为第一次调用时,在与通道进行任何交互之前),它们会收到套接字异常。所以,也许对于可能会看到这篇文章的其他人:请务必在您的应用程序中检查您的任务,并始终检查与您的应用程序相关的任何服务器!非常感谢你:D