标签: timeout

LWP :: UserAgent请求方法的真正超时

我正在尝试向不可靠的服务器实现请求.请求是一个很好的,但我的perl脚本不能100%成功完成.问题是服务器偶尔会死锁(我们试图找出原因)并且请求永远不会成功.由于服务器认为它是活动的,它会使套接字连接保持打开状态,因此LWP :: UserAgent的超时值对我们来说没有任何好处.对请求强制执行绝对超时的最佳方法是什么?

仅供参考,这不是DNS问题.死锁与大量同时访问Postgres数据库的更新有关.出于测试目的,我们基本上在服务器响应处理程序中放置了while(1){}行.

目前,代码如下所示:

my $ua = LWP::UserAgent->new;
ua->timeout(5); $ua->cookie_jar({});

my $req = HTTP::Request->new(POST => "http://$host:$port/auth/login");
$req->content_type('application/x-www-form-urlencoded');
$req->content("login[user]=$username&login[password]=$password");

# This line never returns 
$res = $ua->request($req);
Run Code Online (Sandbox Code Playgroud)

我尝试使用信号来触发超时,但这似乎不起作用.

eval {
    local $SIG{ALRM} = sub { die "alarm\n" };
    alarm(1);
    $res = $ua->request($req);
    alarm(0);
};
# This never runs
print "here\n";
Run Code Online (Sandbox Code Playgroud)

我将要使用的最终答案是有人离线提出的,但我会在这里提到它.出于某种原因,SigAction有效,而$ SIG(ALRM)却没有.仍然不确定为什么,但这已经过测试可行.这是两个工作版本:

# Takes a LWP::UserAgent, and a HTTP::Request, returns a HTTP::Request
sub ua_request_with_timeout {
    my $ua = $_[0];
    my $req = $_[1];
    # Get whatever timeout is set for …
Run Code Online (Sandbox Code Playgroud)

perl signals timeout lwp

12
推荐指数
1
解决办法
2万
查看次数

更改NHibernate Session.Save命令超时

我们有几个长时间运行的后端进程需要比默认的30秒更长的时间.

我们的NHibernate版本是2.0.1.4000,Spring.NET是1.2.0.20313.NHibernate通过Spring.NET以这种方式配置:

<object id="SessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate20">
    <property name="DbProvider" ref="DbProvider"/> 
    <property name="MappingAssemblies">
        <list>
            <value>SomeKindOfAnItem</value>
        </list> 
    </property>
    <property name="HibernateProperties">
        <dictionary>
            <entry key="expiration" value="120"/>
            <entry key="adonet.batch_size" value="10"/>
            <entry key="cache.provider_class" value="NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache"/>
            <entry key="cache.use_query_cache" value="true"/>
            <entry key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>
            <entry key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
            <entry key="dialect" value="NHibernate.Dialect.MsSql2005Dialect"/>
            <entry key="current_session_context_class" value="Spring.Data.NHibernate.SpringSessionContext, Spring.Data.NHibernate20"/>
            <entry key="show_sql" value="false"/>
        </dictionary>
    </property>
</object>
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我试图在Web.config中将NHibernate command_timeout设置为60.这是来自Web.config:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="command_timeout">60</property>
  </session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,命令在30秒后超时.

我构建了一个控制台应用程序,就像Web应用程序一样调用DAO.我在其配置文件中具有完全相同的NHibernate配置设置.IDbCommand在60秒后超时,而不是30,使用配置文件中的设置成功.

我尝试调试应用程序并检查从网站调用DAO程序集时是否设置了commandTimeout.它是.

这是来自Visual Studio观看:

((NH​​ibernate.Driver.DriverBase)(((NHibernate.Connection.DriverConnectionProvider)((NHibernate.Impl.SessionFactoryImpl)session.SessionFactory).ConnectionProvider).Driver)).commandTimeout:60

会话创建如下:

ISession session = SessionFactoryUtils.GetSession(HibernateTemplate.SessionFactory, true);
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果命令超时字段从我的Web.config成功设置为60,为什么它会在30秒后超时?我可以尝试任何想法吗?

.net nhibernate timeout application-settings

12
推荐指数
1
解决办法
2万
查看次数

在C#中禁用单元测试的超时

我遇到了30分钟后测试超时的问题.关于设置无限超时的任何想法?我已经尝试了Timeout(0),但它在30分钟后仍然会超时.

我在Visual Studio 2008中运行这些单元测试.

c# unit-testing timeout

12
推荐指数
1
解决办法
1万
查看次数

IIS7应用程序请求路由(arr反向代理)与托管模块相结合 - 超时

我正在尝试构建一个代理服务器来处理对内部站点的请求(隐藏原点),但同时检查数据包并异步后处理它们.

例如,假设所有对http://www.foo.com的 SOAP调用都将转到http://192.168.1.1,同时存储在数据库中进行后期分析.内部服务器是一个黑盒子,所以更改它的内容超出了这个问题的范围.

无论如何,我已经配置了ARR,使用反向代理,使用通配符制作URL重写过滤器,所有工作都完美无瑕.然后,我尝试添加一个用C#编写的托管HttpModule,并挂钩到Application_BeginRequest和Application_EndRequest.我能够在最终请求(应用程序池处于集成模式)中访问请求标头,响应标头,甚至能够通过在Response.Filter上设置过滤器来读取输出流中的响应内容,该过滤器将所有写入缓存在附加内存流中.

问题是,当我尝试读取(在模块BeginRequest处理程序内)来自请求的输入流时,ARR会停留一段时间并抛出一个

HTTP错误502.3 - 错误网关操作超时处理程序ApplicationRequestRoutingHandler错误代码0x80072ee2

所以它超时了.

查看失败的请求跟踪我看到:

MODULE_SET_RESPONSE_ERROR_STATUS警告ModuleName ="ApplicationRequestRouting",Notification ="EXECUTE_REQUEST_HANDLER",HttpStatus ="502",HttpReason ="Bad Gateway",HttpSubStatus ="3",ErrorCode ="2147954402",ConfigExceptionInfo =""SET_RESPONSE_ERROR_DESCRIPTION警告ErrorDescription ="操作时间到"

现在网上的任何类似帖子都没有帮助,因为这不是超时错误(代理有120秒设置,页面答案不到100毫秒),以及我评论试图读取FORM数据的处理程序代码的那一刻或者InputStream数据,一切都可以作为魅力.

即使我在读取后将输入流的位置设置为0,我仍然会有超时.如果我在EndRequest上读取输入流,它将获得0个字节,即使它是POST请求.(这显然是错的)

ARR是否有一个错误,我尝试在尝试重新路由之前尝试读取输入流?

使用的东西:Windows Server 2008 R2 IIS 7.5 ARR v2 .Net Framework 3.5模块

想法?谢谢/ Cosmin

iis-7 timeout reverse-proxy httpmodule

12
推荐指数
2
解决办法
1万
查看次数

在执行POST时,无法将HttpWebRequest超时设置为高于100秒?

我遇到了一个问题,HttpWebRequest在执行POST时不会尊重超过100秒的超时值.但是,如果请求是GET,则会遵循高于100秒的超时值.在.GetResponse()调用时抛出超时异常.我正在设置我能够发现的所有超时值,但似乎我错过了一个,或者框架中有一个错误.

这是一个针对.NET Framework 3.5的C#应用​​程序,使用Visual Studio 2008构建.Web服务器是IIS 6.0,连接超时设置为默认的120秒,启用了保持活动...再次GET请求尊重超时值I指定,如果<= 100秒,POST请求将遵守超时.

这是我的代码:

int timeout = 200000; // 200 seconds
HttpWebRequest proxyRequest = (HttpWebRequest)WebRequest.Create(serverUrl);
proxyRequest.Accept = clientRequest.AcceptTypes.ToDelimitedString(", ");
proxyRequest.Method = "POST"
proxyRequest.UserAgent = clientRequest.UserAgent;
proxyRequest.Timeout =  timeout;
proxyRequest.ReadWriteTimeout = timeout;
proxyRequest.KeepAlive = false;
proxyRequest.AllowAutoRedirect = false;
proxyRequest.ServicePoint.Expect100Continue = false;
proxyRequest.ServicePoint.MaxIdleTime = timeout;
proxyRequest.ServicePoint.ConnectionLeaseTimeout = -1;

try
{
    // add post data
    request.ContentType = "application/x-www-form-urlencoded";
    byte[] postData = Encoding.UTF8.GetBytes("somedata=7&moredata=asdf");
    // set some post data
    request.ContentLength = postData.Length;
    using (Stream stream = request.GetRequestStream())
    {
        stream.Write(postData, 0, …
Run Code Online (Sandbox Code Playgroud)

c# timeout http-post httpwebrequest

12
推荐指数
1
解决办法
3万
查看次数

是否可以为std :: cin设置超时?

是否可以为std :: cin设置超时?例如,std :: cin在10秒内没有收到任何数据 - 它会抛出异常或返回错误.

编辑:

那计时器Boost library呢?据我所知,它是便携式库.是否有可能要求Boost库的计时器在预定义的时间段后抛出异常?我想它可以解决这个问题.

c++ stdin timeout

12
推荐指数
1
解决办法
5855
查看次数

Java:套接字读取超时异常

我试图打电话给一个非常重的过程.它的平均工作时间估计为9-10分钟.

当我执行该过程时,我将超时设置为一个非常庞大的数字:99999999.

2分钟后,我收到以下错误:

java.net.SocketTimeoutException:读取超时

我试图把它弄得更糟,我把超时设置为3000,并且在预期的3秒后我得到了同样的错误.

你知道为什么socket.setSoTimeout(99999999)把它设置为最大120000吗?

java sockets timeout exception

12
推荐指数
1
解决办法
6万
查看次数

如何使用python 2.7.6进行subprocess.call超时?

可能有人问过,但是在使用python 2.7时我找不到任何关于subprocess.call超时的信息

python subprocess timeout python-2.7

12
推荐指数
2
解决办法
1万
查看次数

如何在PHP(Laravel)中调试超时错误?

我收到客户遇到的许多错误的报告

Symfony的\分量\调试\异常\ FatalErrorException

最大执行时间超过30秒

我,我自己,无法在我的本地机器上或生产服务器上复制它.这个网址遍布整个网站,因此,我猜它是全球性的,就像一个造成这种情况的中间件.

我使用Sentry.io来收集数据,但异常跟踪只有1个条目指向Symfony基本代码中的某个代码,最常见的是:

第73行的vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php

第45行的vendor/symfony/finder/Iterator/DateRangeFilterIterator.php

第69行的vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php

显然,似乎存在与文件系统相关的东西,但由于没有跟踪,我无法看到在站点代码中查找错误的位置.我猜它是某种无限循环或泄漏,但没有任何痕迹可以看,并没有一致的方法来重现问题.

我应该如何寻找问题并进行调试?

我可以设置任何设置,还是可以使用/启用的工具?

php debugging timeout symfony laravel

12
推荐指数
1
解决办法
2454
查看次数

如果达到内存限制,则中止评估Haskell表达式

我正在使用QuickCheck来测试自动生成的属性(类似于QuickSpec),但是我遇到的一个常见问题是耗尽内存,这可能是由于幼稚的递归生成器或非常大的函数输出(例如,一个失败是由指数引起的) Peano数的函数,会生成巨大的嵌套结构)。

我想知道是否有一种方法可以放弃评估(如果达到)(驻留)内存限制。似乎我们可以为超时执行此操作,但是内存似乎比较棘手。这样,如果我们使用过多的内存,则可以放弃该测试(就像==>先决条件失败了一样)。

通过查看weigh包的来源,我可以看到如何衡量整个程序的内存使用情况。这是可行的,但针对一个特定的表达式(也许通过获取一个线程使用的内存或其他东西)来衡量它会更好(更健壮)。

就我的目的而言,将表达式完全标准化就足够了,因为我不必担心递归结构(我可以将其应用于测试结果,实际上是布尔值)。

memory haskell timeout quickcheck

12
推荐指数
0
解决办法
128
查看次数