我使用实现IHttpAsyncHandler的通用处理程序遇到了一些性能问题.最简单的是,处理程序接收GET请求,20秒后在响应中写入"<timeout />"后结束响应.
当使用10000-20000个并发请求锤击.ashx时,在准确的5000个请求之后,503服务器不可用.切换到同步模式并立即结束请求时,问题就消失了.
我已经修改了许多设置,但我唯一能够实现的是降低发生此错误的请求阈值.
这是我玩过的设置的简要说明:
machine.config中:
<configuration>
...
<system.web>
...
<processModel enable="true" requestQueueLimit="10000"/>
...
Run Code Online (Sandbox Code Playgroud)
web.config中:
<configuration>
...
<system.web>
...
<httpRuntime enable="true" appRequestQueueLimit="10000"/>
...
Run Code Online (Sandbox Code Playgroud)
IIS管理器> ApplicationPools>高级设置
Queue Length : 65535
Run Code Online (Sandbox Code Playgroud)
虽然我不能确定,但是如果请求是同步的,那么这些设置似乎工作正常,但是当异步时,在服务器开始告诉我离开之前,我似乎无法超越5000个请求.如果我把事情设置得更低(不能确切地记住上面的设置,但我已经尝试了所有设置),那么503计数会相应地上升,但是当负载严重时我永远不能阻止它超过5000 .
似乎有很多设置分散在无数的地方可能会影响到这一点,但5000似乎相当固定.我在这里看到appRequestQueueLimit不能超过5000,但是找不到关于此的更多信息,并想知道这是否是错误的信息.
IIS中是否存在任何类型的"泛滥控制"设置,可能会将单个主机限制为不超过5000个请求?如何让IIS处理更多5000个并发异步请求?
编辑2:是否有任何计数器或其他指标可能超出限制,我将如何进一步调查?
编辑:这是loadgenerator代码:
using System;
using System.Net;
using System.Threading;
namespace HammerTime
{
class Program
{
private static int counter = 0;
static void Main(string[] args)
{
var limit = 5000;
ServicePointManager.DefaultConnectionLimit=limit;
for (int i = 0; i < limit;++i )
{
StartWebRequest(i.ToString());
}
Console.ReadLine();
}
private …Run Code Online (Sandbox Code Playgroud) 我有一个已经运行了很长一段时间的Azure服务.它根据请求中的参数构建word或powerpoint文档,并将uri返回到构建文档.这是通过visualforce页面进行访问,当您单击按钮时,它会调用服务并显示刚刚构建的文档的链接.简单.
突然之间,我得到了一个明显随机的503 Service Unavailable错误.有时我点击按钮,没问题.其他时间503错误.每次按钮触发完全相同的请求.有谁知道为什么会发生这种情况?
显然,一遍又一遍地做同样的事情并期待不同的结果,不是精神错乱!
感谢您抽时间阅读.
我有一个运行状况检查端点/status返回以下状态代码和响应正文:
200 OK?503 Service UnnavailableHTTP状态代码对于降级响应应该是什么?"降级"检查用于成功但速度缓慢或不稳定的检查.什么HTTP状态代码最有意义?
http health-monitoring http-status-codes http-status-code-503 kubernetes-health-check
我对ASP.Net工作进程如何处理进程的了解非常不足.我希望那里的一些专家能够帮助我.
如果我使用System.OutOfMemoryException使工作进程崩溃,那么用户体验的是同一进程所服务的其他用户?他们会得到一个空白的屏幕吗?503错误?
我将尝试与我们实验室中的其他人一起测试这种情况,但我想我会把它漂浮在那里.我会用我们的结果更新.
更新:我们的结果各不相同.如果我们人为地引发OOM异常(例如通过将更大和更大的PDF加载到内存中),那个工作进程所服务的其他线程将暂时"挂起"然后完成,而其他线程似乎永远不会返回.谢谢你的回复.
我使用nginx作为apache服务器的前端.配置文件如下所示:
upstream apache {
server localhost:8000;
}
server {
listen 80;
error_page 503 /www/static/503.html;
# need some magic here #
location /static/ {
root /www/static/;
}
location / {
proxy_path http://apache/;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当apache关闭时,我收到一个由nginx生成的简单502页面.如何使它服务于我的自定义错误页面并返回状态代码503,这在这种情况下更相关?
我有一个简单的配置文件,用于维护时自定义503错误页面.相关部分是这样的:
server {
listen 80 default;
root /usr/share/nginx/html;
server_name example.com;
location / {
if (-f $document_root/503.json) {
return 503;
}
}
# error 503 redirect to 503.json
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /503.json break;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是Nginx发现任何请求都在静态文件中解析,任何POST,PUT和DELETE请求都得到405(方法不允许)响应.
所以问题是:如何告诉Nginx为任何HTTP方法提供页面服务?
我正在使用python请求库(请参阅此处)创建下载服务,以从其他服务器下载数据.问题是,有时我得到一个503 error,我需要显示一个适当的消息.请参阅以下示例代码:
import requests
s = requests.Session()
response = s.get('http://mycustomserver.org/download')
Run Code Online (Sandbox Code Playgroud)
我可以检查response.status_code并获得status code = 200.但是我如何try/catch针对特定错误,在这种情况下,我希望能够503 error适当地检测和处理它们.
我怎么做?
我看到了其中的一些.我理解他们的意思,这就是为什么我无法理解为什么会这样.非常不一致,并且似乎不是超时问题.
相关的东西:
一些日志数据:
10月29日18时22分12秒的myapp的web生产的Heroku /路由器:袜子=客户端在=错误代码= H18 DESC = "请求中断" 方法= GET路径= "/ aroute" 主机= ... = REQUEST_ID ... fwd ="##.##.##.###"dyno = web.1 connect = 2ms service = 34ms status = 503 bytes = 3816
10月29日18点22分13秒的myapp的web生产的Heroku /路由器:袜子=客户端在=错误代码= H18 DESC = "请求中断" 方法= GET路径= "/ aroute" 主机= ... = REQUEST_ID ... fwd ="##.##.##.###"dyno = web.1 connect = 1ms service = 538ms status = 503 bytes = 3822
10月29日18时22分14秒的myapp的web生产的Heroku /路由器:袜子=客户端在=错误代码= H18 DESC = …
这是SO中这个帖子的类似问题.但是这里提供的答案不能应用于我的情况,因为我无法更改服务器的响应头.
假设http POST到不同的来源.这意味着CORS,包括CORS预检交换.现在假设OPTIONS请求503 service unavailable 由于服务器问题而返回错误.在这种情况下,错误处理程序提供""数据和0状态,而不是给我状态代码503和文本:service not available.下图显示了此场景的一个示例.


我正在使用angularjs $ http,我知道在响应中没有CORS头,如果发生这样的错误.我无法改变它.
有什么办法可以在我的拒绝对象中收到正确的错误代码和文本.
我检查了很多与此问题相关的帖子,但似乎没有什么能解决我的问题.所以现在我希望你们能给我神奇的答案.
我正在使用Intellij(但也尝试使用SourceTree)从Fisheye拉/推/克隆存储库.但是我收到错误:
git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin
fatal: unable to access 'https://myUser@myUrl/fisheye/git/myRepo.git/': Received HTTP code 503 from proxy after CONNECT
Run Code Online (Sandbox Code Playgroud)
关于503的提示意味着因维护而导致的临时停机时间对我不起作用,因为此问题现在持续一周.
关于错误/丢失代理设置的提示似乎也不起作用.我为系统git和IDE(Intellij)设置了http和https代理.
它以前工作过,我能够克隆存储库.然后我创建了一个新的分支,进行了一些更改,并希望将其推回到主服务器.
我真的很期待一些聪明的提示.
谢谢到目前为止
UPDATE
我补充说:
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1
我收到了以下日志:
$ git fetch
trace: built-in: git 'fetch'
trace: run_command: 'git-remote-https' 'origin' 'https://Username@myWebService.de/randomGit.git/'
* Couldn't find host myWebService in the _netrc file; using defaults
* Trying 15.46.16.11...
* Connected to myProxy.com (15.46.16.11) port 8080 (#0)
* Establish HTTP proxy tunnel to myWebService.de:443
> …Run Code Online (Sandbox Code Playgroud) git proxy intellij-idea http-status-code-503 atlassian-sourcetree