精华内容
下载资源
问答
  • 国内访问github经常超时,可以按照如下方式配置hosts,就可以解决~ 首先,把你访问过慢的域名复制到这个网站查询对应的ip地址。https://www.ipaddress.com 得到对应的ip地址后,进入/etc/hosts添加如下内容即可...

    国内访问github经常超时,可以按照如下方式配置hosts,就可以解决~

    1. 首先,把你访问过慢的域名复制到这个网站查询对应的ip地址。https://www.ipaddress.com
      在这里插入图片描述
    2. 得到对应的ip地址后,进入/etc/hosts添加如下内容即可(windows电脑hosts文件位置可以百度一下)
    140.82.113.4 github.com
    199.232.69.194 github.global.ssl.fastly.net
    185.199.108.133 raw.githubusercontent.com
    185.199.109.133 raw.githubusercontent.com
    185.199.110.133 raw.githubusercontent.com
    185.199.111.133 raw.githubusercontent.com
    

    添加完成后重新访问github.com,即可正常访问~

    展开全文
  • 如果碰到对方服务器一直没有响应的时候,我们就悲剧了,很容易把整个服务器搞死,所以在访问http的时候也需要考虑超时的问题。[ CURL 访问HTTP]CURL 是我们常用的一种比较靠谱的访问HTTP协议接口的lib库,性能高,...

    【HTTP访问】

    一般我们访问HTTP方式很多,主要是:curl, socket, file_get_contents() 等方法。

    如果碰到对方服务器一直没有响应的时候,我们就悲剧了,很容易把整个服务器搞死,所以在访问http的时候也需要考虑超时的问题。

    [ CURL 访问HTTP]

    CURL 是我们常用的一种比较靠谱的访问HTTP协议接口的lib库,性能高,还有一些并发支持的功能等。

    CURL:

    curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括:

    *(重要) CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。

    *(重要) CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。 (在cURL 7.16.2中被加入。从PHP 5.2.3起可使用。 )

    CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。

    CURLOPT_CONNECTTIMEOUT_MS 尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。  在cURL 7.16.2中被加入。从PHP 5.2.3开始可用。

    CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒。

    curl普通秒级超时:

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL,$url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_TIMEOUT, 60);   //只需要设置一个秒的数量就可以

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);

    curl普通秒级超时使用:

    curl_setopt($ch, CURLOPT_TIMEOUT, 60);

    curl如果需要进行毫秒超时,需要增加:

    curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);

    或者是:

    curl_setopt ( $ch,  CURLOPT_NOSIGNAL, true); 是可以支持毫秒级别超时设置的

    curl一个毫秒级超时的例子:

    if (!isset($_GET['foo'])) {

    // Client

    $ch = curl_init('http://example.com/');

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_NOSIGNAL, 1);

    //注意,毫秒超时一定要设置这个

    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);

    //超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用

    $data = curl_exec($ch);

    $curl_errno = curl_errno($ch);

    $curl_error = curl_error($ch);

    curl_close($ch);

    if ($curl_errno > 0) {

    echo "cURL Error ($curl_errno): $curl_error\n";

    } else {

    echo "Data received: $data\n";

    }

    } else {

    // Server

    sleep(10);

    echo "Done.";

    }

    ?>

    其他一些技巧:

    1. 按照经验总结是:cURL 版本 >= libcurl/7.21.0 版本,毫秒级超时是一定生效的,切记。

    2. curl_multi的毫秒级超时也有问题。。单次访问是支持ms级超时的,curl_multi并行调多个会不准

    [流处理方式访问HTTP]

    除了curl,我们还经常自己使用fsockopen、或者是file操作函数来进行HTTP协议的处理,所以,我们对这块的超时处理也是必须的。

    一般连接超时可以直接设置,但是流读取超时需要单独处理。

    自己写代码处理:

    $tmCurrent = gettimeofday();

    $intUSGone = ($tmCurrent['sec'] - $tmStart['sec']) * 1000000

    + ($tmCurrent['usec'] - $tmStart['usec']);

    if ($intUSGone > $this->_intReadTimeoutUS) {

    return false;

    }

    或者使用内置流处理函数 stream_set_timeout() 和 stream_get_meta_data() 处理:

    // Timeout in seconds

    $timeout = 5;

    $fp = fsockopen("example.com", 80, $errno, $errstr, $timeout);

    if ($fp) {

    fwrite($fp, "GET / HTTP/1.0\r\n");

    fwrite($fp, "Host: example.com\r\n");

    fwrite($fp, "Connection: Close\r\n\r\n");

    stream_set_blocking($fp, true);

    //重要,设置为非阻塞模式

    stream_set_timeout($fp,$timeout);

    //设置超时

    $info = stream_get_meta_data($fp);

    while ((!feof($fp)) && (!$info['timed_out'])) {

    $data .= fgets($fp, 4096);

    $info = stream_get_meta_data($fp);

    ob_flush;

    flush();

    }

    if ($info['timed_out']) {

    echo "Connection Timed Out!";

    } else {

    echo $data;

    }

    }

    file_get_contents 超时:

    $timeout = array(

    'http' => array(

    'timeout' => 5

    //设置一个超时时间,单位为秒

    )

    );

    $ctx = stream_context_create($timeout);

    $text = file_get_contents("http://example.com/", 0, $ctx);

    ?>

    fopen 超时:

    $timeout = array(

    'http' => array(

    'timeout' => 5

    //设置一个超时时间,单位为秒

    )

    );

    $ctx = stream_context_create($timeout);

    if ($fp = fopen("http://example.com/", "r", false, $ctx)) {

    while( $c = fread($fp, 8192)) {

    echo $c;

    }

    fclose($fp);

    }

    ?>

    以上就是小编为大家带来的浅谈php处理后端&接口访问超时的解决方法全部内容了,希望大家多多支持云栖社区~

    以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php

    接口超时

    浅谈前后端分离、数据处理 前端 后端、快贷进入后端处理部门、第三方登录后端处理、垃圾分类后端处理方案,以便于您获取更多的相关知识。

    展开全文
  • java应用无法访问-访问超时-日志打印正常 背景 最近一个应用出现了一个奇怪的现象,持续了几个月了。但是一直没排查出来是什么问题。表现如下:程序运行一段时间之后,接口无法访问(访问超时,一直没有到达后台),...

    java应用无法访问-访问超时-日志打印正常

    背景

    最近一个应用出现了一个奇怪的现象,持续了几个月了。但是一直没排查出来是什么问题。表现如下:程序运行一段时间之后,接口无法访问(访问超时,一直没有到达后台),但是日志没有报错信息。

    结果

    先说下出现以上问题的原因,我们使用的是undertow容器,而非tomcat,因为有一个请求处理过程需要访问到其他应用的接口,但是该应用接口响应非常非常慢,导致过多的线程卡住了,新的请求没法被处理。最终结果就是调整容器的最大线程数。在应用配置文件添加如下配置:

    server:
      undertow:
        io-threads: 8
        worker-threads: 400

    排查思路

    1. 检查该问题出现在那一个层级

      该应用是经典的:nginx+docker运行。

      直接通过地址访问(nginx层),结果超时。查看

      层级结果处理结果
      直接通过地址访问(nginx层)超时查看nginx日志,正常,暂时排除nginx问题。但是应用日志没有打印。
      进入宿主机直接访问应用超时查看应用日志,没有相关日志打印。继续排查
      进入docker容器直接用localhost访问应用查看应用日志,没有相关日志打印。可以确定是应用出了问题
    2. 目前已经定位到了应用或者应用的机器问题,继续排查

      我们可以先检查一下应用服务器的各项指标是否正常

      指标状态
      CPU正常
      内存正常
      应用宿主机磁盘IO正常

      以上指标正常,排除服务器问题。下面因为应用的日志是正常的,所以没办法通过日志判断问题点。

    3. 下面继续排查应用的一些指标

      我们可以通过arthas去协助我们更快的找到问题所在,可以查看我之前写的,如何在docker容器下使用arthas

      docker使用atrhas

      指标状态
      jvm的内存情况异常(survival区只有18M,并且使用率100%)
      线程状况可能异常(目前线程数200多左右,考虑到tomcat默认是200,所以可能是线程满了)

      jvm的内存情况异常解决

      下面是一些细节,可以看到,survival区只有18M貌似有点问题,所以我们还是解决一下:

      image-20210515105226190.png

    说明:由于使用的是JDK8,默认开启 AdaptiveSizePolicy

    AdaptiveSizePolicy(自适应大小策略) 是 JVM GC Ergonomics(自适应调节策略) 的一部分。

    如果开启 AdaptiveSizePolicy,则每次 GC 后会重新计算 Eden、From 和 To 区的大小,计算依据是 GC 过程中统计的 GC 时间、吞吐量、内存占用量。

    JDK 1.8 默认使用 UseParallelGC 垃圾回收器,该垃圾回收器默认启动了 AdaptiveSizePolicy。所以我的解决方案:把AdaptiveSizePolicy关闭

    下面是参考文章:https://blog.csdn.net/weixin_47083537/article/details/106788596

    解决方案:在启动的时候添加参数-XX:+UseConcMarkSweepGC

    java -jar -XX:+UseConcMarkSweepGC /app.jar

    DOCKERFILE如下:

    FROM java:8
    
    ENV TZ=PRC
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    ADD target/lean-api-*.jar /app.jar
    
    ENTRYPOINT ["sh","-c","java -jar -XX:+UseConcMarkSweepGC /app.jar $PARAMS"]

    线程问题处理

    目前线程数200多左右,考虑到tomcat默认是200,所以可能是线程满了

    下面是arthas线程状况

    image-20210515112822709.png

    由于习惯,我第一反应就是调整tomcat的最大线程数

    server:
      tomcat:
        max-threads: 800

    重启,继续观察。发现应用还是挂了。。。。下面就百思不得其解了。进入容器,继续启动arthas观察,线程数依旧维持在200个左右,所以可能是其他问题了。

    转折

    在朋友建议下,我把线程栈给dump出来,

    进入容器:

    # docker 容器
    docker ps # 获取docker 运行的容器列表
    docker exec -it xxxx bash  # 进入对应的容器
    
    # k8 容器
    kubectl get pods -n xxx # 查看k8 xx的namespace下面的pods
    kubectl exec -it xxx bash -n xxx # 进入容器

    查找对应的java进程号:

    ps -ef | grep java

    打印线程栈到文件:

    jstack 8 > /tmp/20210515.txt # 8 是找到的java进程号,把该java应用的线程栈输出到/tmp/20210515.txt文件中

    把容器的文件拷贝到宿主机中,方便后续分析(非必须)

    # docker 
    docker cp xxxx:/tmp/20210515.txt /tmp/20210515.txt 
    
    # k8s
    kubectl cp xxxx:/tmp/20210515.txt /tmp/20210515.txt -n xxx # 把对应命名空间下的指定容器的文件:/tmp/20210515.txt拷贝到宿主机上

    分析线程栈:发现并没有tomcat线程,经过询问才发现,我们的springboot 应用并没有使用tomcat容器,而是undertow。这就解释了,为什么前面调整tomcat的线程数不起作用。搜索该线程栈文件,发现有一个方法开了非常多线程,有128个

    image-20210515142028183.png

    我们再看下undertow的默认配置:

    image-20210515142110194.png

    该机器是16核心,所以最大工作线程数是核心数的8倍,正好是128个工作线程。同时在postman调用了该外部应用接口,响应时间超过了30s。

    所以,基本可以定位到该问题了:请求超过了undertow的最大工作线程,并且是被queryUserInfo方法卡住的

    优化思路

    问题找到了,下面就是解决问题。主要分2块,1是调整系统参数,2是调整业务代码以减少请求时间

    1. 调高undertow的最大工作线程(治标不治本,只能延缓该问题的出现时间),方法:

      server:
        undertow:
          io-threads: 8
          worker-threads: 400 # 从原来的128调高至400
    2. 给该外部接口增加缓存(因为被调用方的该接口属于非常少变动的,可以放心加长时间的缓存)

      使用内存缓存或者redis都可以,过期时间看具体需求。

    总结

    1. 这个问题困扰了我们很久,陆陆续续花了不少时间找,但是方向都是错的。最后还是请教了大神给了思路和方向
    2. 不要放弃,多去了解java的基础知识。对于这种不太常见的问题,还是需要对系统全面的了解,并且排查真的需要一定的经验。
    展开全文
  • 总是访问超时

    2020-12-24 14:57:37
    看消息提醒总是服务连接已经超时什么的,可能要试几天时间不停尝试才能某个时间运气好看到都有什么具体内容,所以,以后可能就不一定能看到了。

    看csdn消息提醒总是服务连接已经超时什么的,可能要试几天时间不停尝试才能某个时间运气好看到都有什么具体内容(评论、私下等等),所以,以后可能就不一定能看到了。

    展开全文
  • 可以ping,但是telnet端口超时,网站wget超时,访问超时。最后排查是内核配置问题原来是 net.ipv4.tcp_timestamps 设置了为 1 ,即启用时间戳cat /proc/sys/net/ipv4/tcp_timestamps这时将其关闭修改 /etc/sysctl....
  • https://blog.csdn.net/MashiroRin/article/details/104760094
  • CentOS 7.0默认使用firewall作为防火墙,需要改为iptables防火墙。 1.关闭firewall: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 ...
  • 使用浏览器外网访问时,返回超时,time_out,查看防火墙,关闭(centos6,7防火墙命令不一样)
  • 在一个需要低延时响应的hbase集群中,使用hbase默认的客户端超时配置简直就是灾难。但是我们可以考虑在客户端上加上如下几个参数,去改变这种状况:1. hbase.rpc.timeout: RPC timeout, The default 60s, 可以修改为...
  • 解决方法2:如果你是程序员,就跟踪一下报错原因,例如笔试报名报“访问超时,请点击页面右上角“退出”按钮后重新登录。”,我的解决方法是,自己写一个笔试报名页面,实现笔试报名。 笔试报名页面如下: <!...
  • 同一个网站,有同事反映说打不开,他们用的有windows,mac,ubantu系统的,后面自己在虚机上装了个ubantu16.04 LTS,发现访问这个网站也是不成功,用telnet端口的方式测试也是超时,还以为是ubantu的系统设置的问题,...
  • GitHub访问超时

    2021-10-15 15:01:27
    通过查询链接查询延迟最低的DNS 配置电脑DNS文件:C:\Windows\System32\drivers\etc\hosts Win+R->cmd->输入ipconfig/flushdns刷新DNS配置即可
  • postman可以正常访问第三方接口,但通过curl命令在linux服务器访问超时问题 问题描述:测试环境正常跑的项目中调第三方接口不通了,报: Connecttoapi.test.com:443[api.test.com/111.111.111.111]failed:连接超时...
  • service vsftpd start 步骤二:FTP文件配置 进入vsftp.conf文件修改如下配置参数:vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO #是否允许匿名登录 主动登录 connect_from_port_20=YES #【解决访问ftp超时连接】...
  • 因为本地只启了一个php-cgi进程,在用户访问一个php页面的时候nginx已将该进程占用,在该进程又发起http请求时,nginx发现这个仅有的进程已被占用而造成阻塞,就这样造成了死锁,一直到超时。 解决办法就是启动多个...
  • ribbon: ReadTimeout: 60000 ConnectTimeout: 60000
  • 问题描述:开发java应用时,需要访问此网站,在windows上一切正常访问,部署到linux服务器上就出现了访问超时[root@VM_18_115_centos ~]# wget '...getLineAll.action'--2018-10-26 21:16:2...
  • 解决TeamViewer访问超时限制的问题

    千次阅读 2021-05-13 11:03:52
    二、修改MAC地址 1、查看现有的mac地址:打开cmd界面,输入ipconfig/all 按回车,红框标记为无线局域网mac地址。 ...2、修改现有无线局域网mac地址 ...在弹出来的对话框中输入“regedit”,再按回车进入注册表 ...
  • 遇到这个问题,可能会有两种情况,一种是网上常说的nginx访问超时时间。 设置Nginx超时时间 nginx访问出现504 Gateway Time-out,一般是由于程序执行时间过长导致响应超时,例如程序需要执行90秒,而nginx最大响应...
  • 问题:并发稍微多的情况下Redis偶尔返回超时StackExchange的Redis类库,用的较多,但偶尔报的问题非常让人迷惑,访问超时,队列XXX…问题出在Redis服务器吗?可是其他应...
  • 遇到的问题:服务端能正常的启动,客户端访问服务端的时候,一直显示超时 504错误。找了很久的资料都没解决,当看到有一篇文章里写到:我的开发环境是nginx+php,准备作一个soap的实验,soapclient和soapserver都是...
  • 拿自动排课来说,如果一个学校上百个班级,执行一次排课可能需要1-2分钟甚至更长时间,那么会造成前台访问接口超时(当然也可以延长超时时间实现)。解决方案:考虑改造为轮询查询程序执行结果。1. 后台改造:将自动...
  • 1.默认的调用超时处理 默认的调用超时:使用OpenFeign组件再进行服务间通信时要求被调用服务必须再1S内给予响应, 一旦服务执行业务逻辑实践超过1S,OpenFein组件将直接报错 2.修改OpenFeign超时时间 a.指定服务修改...
  • Pip 下载速度慢或者访问超时前言问题解决国内源临时解决方案Linux解决方案Windows解决方案Mac解决方案参考 前言 尝试用Python做一个图片自动处理工具,方便淘宝卖家制作首页图。结果在安装OpenCV的时候就遇到了这种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 426,607
精华内容 170,642
关键字:

访问超时