精华内容
下载资源
问答
  • 遇到这样的情况,是什么原因呢? 1.服务器被暴力破解 2.服务器被攻击DD/CC 遇到这种情况,该如何分析呢? 一、首先,可以先登录服务器里面检查服务器日志,看看是否有IP多次异常登录并显示登录失败的请求,如果显示...

    在使用服务器的过程中,经常会碰到流量异常,时不时的流量很高。

    遇到这样的情况,是什么原因呢?

    1.服务器被暴力破解

    2.服务器被攻击DD/CC

    遇到这种情况,该如何分析呢?

    一、首先,可以先登录服务器里面检查服务器日志,看看是否有IP多次异常登录并显示登录失败的请求,如果显示多次登录失败,说明有人正在尝试暴力破解登录你的服务器,占用了你过多的带宽资源。

    解决办法:把异常请求的IP加入到防火墙的黑名单中;端口改成随机5位,尽量复杂些;密码更改复杂些,安全系数高避免被恶意破解。若已经被暴力破解了,建议重装下系统。不管怎样,预防大于治疗,提前做好安全防护措施是非常有必要的。

    二、其次,检查下服务器的80端口连接数,看看80端口连接数是不是很多,这个要结合用户自己平常对访问流量的一个掌握,一般情况下80连接数几百是正常的,假如上千到万了,很有可能就是被攻击导致的流量异常。那如何查看80连接数呢?

    如何查看80端口连接数:

    Windows系统:

    在运行cmd里面输入此命令:

    netstat -ano|findstr “80”

    或者netstat -an |find /c “:80”

    Linux系统:

    netstat -nat|grep -i ‘80’|wc -l

    解决办法:若是被攻击了导致的流量异常,一般情况下服务器商会封掉被攻击的IP,等没有被攻击了,一定时间后会自动解封。这里要判别下是打IP还是打网站,可以把被攻击的IP下的站解析到其他的IP下。若这个换过的IP还是被打,很有可能是网站被攻击,一般情况下都是同行竞争引起的,这个时候建议使用高防类的服务器。若是换了IP,之前的被攻击的IP还是被打,那可能是打IP,可以找服务器商更换IP

    展开全文
  • 问题描述: 最近突然收到了测试组...然后通过本地调试,发现网络请求的时候报了如下异常:该异常为SSL握手失败,但是为什么有的手机可以成功有的手机又失败了呢。然后又试了下其他版本的手机,发现Android5.0以下系...

    问题描述:

        最近突然收到了测试组提的bug,说是部分手机打开APP的时候会报服务器连接异常。然后我就用我的手机试了下,发现没有问题。然后用他们在缺陷描述中写的测试机型和系统版本进行了测试。发现确实会报服务区连接异常。然后通过本地调试,发现网络请求的时候报了如下异常:


    该异常为SSL握手失败,但是为什么有的手机可以成功有的手机又失败了呢。然后又试了下其他版本的手机,发现Android5.0以下系统的手机都不通。

    问题原因:

    首先想到的是后台服务器那边前两天更新了https协议的版本。推测应该是和这个有关。经确认,后台服务器是禁止TLS1.0,TLS1.1和TLS1.2放行。然后查看了一下Google关于SSLEngine的官方文档说明,不同Android版本针对于TLS协议的默认配置图如下:


    从上图可以可知:

    • TLSv1.0从API 1+就被默认打开
    • TLSv1.1和TLSv1.2只有在API 20+ 才会被默认打开
    • 也就是说低于API 20+的版本是默认关闭对TLSv1.1和TLSv1.2的支持,若要支持则必须自己打开

    这就能解释为什么Android5.0以下系统在进行HTTPS访问时会产生上述异常。

    解决方案:

    首先我们可以让服务器配置支持TLS1.0、1.1、1.2,这样客户端不需要做任何处理,就可以兼容Android5.0以下的手机了。

    但后台那边也是出于安全,才会只放行安全性更高的TLS1.1和TLS1.2协议。所以我们只能在客户端添加新协议的支持。

    因此我们需要给低版本的协议添加Cipher suites,我们需要自定义SSLSocketFactory,自定义的SSLSocketFactory如下:

    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.security.GeneralSecurityException;
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.LinkedList;
    import java.util.List;
    
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSocket;
    import javax.net.ssl.SSLSocketFactory;
    import javax.net.ssl.X509TrustManager;
    
    public class SSLSocketFactoryCompat extends SSLSocketFactory {
        private SSLSocketFactory defaultFactory;
        // Android 5.0+ (API level21) provides reasonable default settings
        // but it still allows SSLv3
        // https://developer.android.com/about/versions/android-5.0-changes.html#ssl
        static String protocols[] = null, cipherSuites[] = null;
        static {
            try {
                SSLSocket socket = (SSLSocket)SSLSocketFactory.getDefault().createSocket();
                if (socket != null) {
                    /* set reasonable protocol versions */
                    // - enable all supported protocols (enables TLSv1.1 and TLSv1.2 on Android <5.0)
                    // - remove all SSL versions (especially SSLv3) because they're insecure now
                    List<String> protocols = new LinkedList<>();
                    for (String protocol : socket.getSupportedProtocols())
                        if (!protocol.toUpperCase().contains("SSL"))
                            protocols.add(protocol);
                    SSLSocketFactoryCompat.protocols = protocols.toArray(new String[protocols.size()]);
                    /* set up reasonable cipher suites */
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
                        // choose known secure cipher suites
                        List<String> allowedCiphers = Arrays.asList(
                                // TLS 1.2
                                "TLS_RSA_WITH_AES_256_GCM_SHA384",
                                "TLS_RSA_WITH_AES_128_GCM_SHA256",
                                "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
                                "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
                                "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
                                "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
                                "TLS_ECHDE_RSA_WITH_AES_128_GCM_SHA256",
                                // maximum interoperability
                                "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
                                "TLS_RSA_WITH_AES_128_CBC_SHA",
                                // additionally
                                "TLS_RSA_WITH_AES_256_CBC_SHA",
                                "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
                                "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
                                "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
                                "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA");
                        List<String> availableCiphers = Arrays.asList(socket.getSupportedCipherSuites());
                        // take all allowed ciphers that are available and put them into preferredCiphers
                        HashSet<String> preferredCiphers = new HashSet<>(allowedCiphers);
                        preferredCiphers.retainAll(availableCiphers);
                        /* For maximum security, preferredCiphers should *replace* enabled ciphers (thus disabling
                         * ciphers which are enabled by default, but have become unsecure), but I guess for
                         * the security level of DAVdroid and maximum compatibility, disabling of insecure
                         * ciphers should be a server-side task */
                        // add preferred ciphers to enabled ciphers
                        HashSet<String> enabledCiphers = preferredCiphers;
                        enabledCiphers.addAll(new HashSet<>(Arrays.asList(socket.getEnabledCipherSuites())));
                        SSLSocketFactoryCompat.cipherSuites = enabledCiphers.toArray(new String[enabledCiphers.size()]);
                    }
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        public SSLSocketFactoryCompat(X509TrustManager tm) {
            try {
                SSLContext sslContext = SSLContext.getInstance("TLS");
                sslContext.init(null, (tm != null) ? new X509TrustManager[] { tm } : null, null);
                defaultFactory = sslContext.getSocketFactory();
            } catch (GeneralSecurityException e) {
                throw new AssertionError(); // The system has no TLS. Just give up.
            }
        }
        private void upgradeTLS(SSLSocket ssl) {
            // Android 5.0+ (API level21) provides reasonable default settings
            // but it still allows SSLv3
            // https://developer.android.com/about/versions/android-5.0-changes.html#ssl
            if (protocols != null) {
                ssl.setEnabledProtocols(protocols);
            }
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP && cipherSuites != null) {
                ssl.setEnabledCipherSuites(cipherSuites);
            }
        }
        @Override
        public String[] getDefaultCipherSuites() {
            return cipherSuites;
        }
        @Override
        public String[] getSupportedCipherSuites() {
            return cipherSuites;
        }
        @Override
        public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
            Socket ssl = defaultFactory.createSocket(s, host, port, autoClose);
            if (ssl instanceof SSLSocket)
                upgradeTLS((SSLSocket)ssl);
            return ssl;
        }
        @Override
        public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
            Socket ssl = defaultFactory.createSocket(host, port);
            if (ssl instanceof SSLSocket)
                upgradeTLS((SSLSocket)ssl);
            return ssl;
        }
        @Override
        public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
            Socket ssl = defaultFactory.createSocket(host, port, localHost, localPort);
            if (ssl instanceof SSLSocket)
                upgradeTLS((SSLSocket)ssl);
            return ssl;
        }
        @Override
        public Socket createSocket(InetAddress host, int port) throws IOException {
            Socket ssl = defaultFactory.createSocket(host, port);
            if (ssl instanceof SSLSocket)
                upgradeTLS((SSLSocket)ssl);
            return ssl;
        }
        @Override
        public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
            Socket ssl = defaultFactory.createSocket(address, port, localAddress, localPort);
            if (ssl instanceof SSLSocket)
                upgradeTLS((SSLSocket)ssl);
            return ssl;
        }
    }

    然后只需要给我们的请求设置这个SSLSocketFactory就可以了,我们以okhttp为例:

    //定义一个信任所有证书的TrustManager
    final X509TrustManager trustAllCert = new X509TrustManager() {
        @Override
        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
        }
    
        @Override
        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
        }
    
        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return new java.security.cert.X509Certificate[]{};
        }
    };
    //设置OkHttpClient
    OkHttpClient client = new OkHttpClient.Builder().
    sslSocketFactory(new SSLSocketFactoryCompat(trustAllCert), trustAllCert).build();

    设置之后,用低版本手机测试https,就可以测试成功了。

    准备最近这几天再写一篇,详细介绍一下HTTPS 和 SSL/TLS 协议。


    展开全文
  • 高并发请求服务器时,经常出现如下异常:java.lang.OutOfMemoryError: unable to create new native thread,对于此种情况,出现这种情况,是什么原因呢,又该如何解决呢原因问题的表象解释是,你的服务器的单个进程...

    高并发请求服务器时,经常出现如下异常:java.lang.OutOfMemoryError: unable to create new native thread,对于此种情况,出现这种情况,是什么原因呢,又该如何解决呢

    1、原因

    问题的表象解释是,你的服务器的单个进程已经不能再创建更多的线程了,
    那为什么会出现这种情况呢?
    原因有几种情况:
    1.你的应用创建了太多线程了,理论上讲,一个应用进程,创建多个线程,确实可以提高应用程序的并发能力,但线程的数量并不是越大,你的应用程序并发能力就越强的。
    2.你的服务器并不允许你的应用程序创建这么多线程,linux系统默认允许单个进程可以创建的线程数是1024个,你的应用创建超过这个数量,就会报java.lang.OutOfMemoryError: unable to create new native thread

    2、解决方法

    1.想办法降低你应用程序创建线程的数量,既然我们已经知道,线程的数量和应用程序并发能力不是正比,就得在应用层面,分析应用是否真的需要创建这么多线程,如果不是,果断改代码,将线程数降到最低
    2.对于有的应用,确实需要创建很多线程,远超过linux系统的默认1024个线程的限制,可以通过修改linux服务器配置,扩大linux默认限制
    3.修改应用程序单线程占用的堆栈大小,线程越多,占用的堆栈空间就越多,如果内存空间不够大,自然也无法创建更多的线程。如果你的老板或客户足够阔气,要多少内存给多少,可以忽略这个

    2.1、降低应用程序创建线程的数量

    应用程序是你负责的,这个只能你自己想办法解决
    原则有几个:
    1.在必须用线程的情况下,如果可以用线程池的,尽量用线程池
    2.检查线程池默认开启线程的个数,如果只想开启一个线程,代码却设置了多个,如果有这种情况,坚决改之
    3.检查线程池的类型,newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,这几种线程池差别还是很大的,不能乱用
    4.检查线程泄漏,所谓线程泄漏,就是你只管生,不管死,只管创建,不管线程的销毁,结果线程的句柄你也没有管理起来,导致进程中创建了无数个僵尸线程,出现unable to create new native thread只是时间问题

    2.2、修改Linux服务器配置

    vi /etc/sysctl.conf
    末尾追加下面的三行
    vm.max_map_count = 1000000
    kernel.pid_max = 1000000
    kernel.threads-max = 1000000
    保存后,执行sysctl -p使其生效
    vi /etc/security/limits.d/90-nproc.conf
    找到这一行,*     soft    nproc     1024
    修改最后的数字为102400

    退出登录工具(SecureCRT),重新连接 执行ulimit -u 命令查看是否为修改后的值
    注意:此处的数字值不是随意改大都能生效,如果超出系统能设置的最大值时,系统自动以系统最大值为有效。
    附:系统最大值计算方法:
    default_nproc = total_memory/128K
    total_memory获取:cat /proc/meminfo |grep MemTotal,单位KB
    举例:

    $ cat /proc/meminfo |grep MemTotal
    MemTotal:       16425852 KB
    $ echo "16425852 / 128"| bc 
    128326

    即该服务器所能设置的nproc最大值为128326

    2.3、修改应用程序单线程占用的堆栈大小

    配置你自己应用单个线程占用的内存资源,以java-web应用部署在tomcat中为例:

    vi catalina.sh

    找到JAVA_OPTS配置项

    JAVA_OPTS="-Xms512m -Xmx1536m -XX:MaxNewSize=128m -XX:PermSize=128m -XX:MaxPermSize=256m"

    在-Xmx1536m后添加“-Xss325k”参数,如下

    JAVA_OPTS="-Xms512m -Xmx1536m -Xss325k -XX:MaxNewSize=128m -XX:PermSize=128m -XX:MaxPermSize=256m"

    保存并重启tomcat

    -Xss参数,是用于设置单线程占用的内存资源,该值并不是随意设置,jdkJDK5.0以后每个线程堆 栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一 个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
    线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误.

    JVM可创建的最大线程数限制因素:
    线程堆栈大小——》进程的最大内存——》操作系统位数

    展开全文
  • 苹果cms10上传视频图片时候有时候出现“请求上传接口出现异常”,这是什么原因,怎么解决? 最近在用苹果cmsv10做视频网站时候出现这个现象,其实解决方法挺简单的,以下方法是演示通过宝塔操作。 1,检查文件夹...

    苹果cms10上传视频图片时候有时候出现“请求上传接口出现异常”,这是什么原因,怎么解决?

    最近在用苹果cmsv10做视频网站时候出现这个现象,其实解决方法挺简单的,以下方法是演示通过宝塔操作。

    1,检查文件夹的权限修改为777,如果这样还不能上传图片的话,请参考方法2;

    2,修改PHP安装fileinfo,安装后重启PHP服务

    原文地址:http://www.dungei.net/6963.html

    展开全文
  • 用idea整合ssh框架,spring管理hibernate配置文件,数据库配置ip地址为远程服务的IP地址,结果jdbc连接时请求了本地ip地址,具体异常日志如下:09-Jul-2017 09:36:10.193 WARN [RMI TCP Connection(3)-127.0.0.1] ...
  • 所谓的会话,就是客户端浏览器和服务端网站之间一次完整的交互过程. ...无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。 无状态原因:浏览器与服务器是使用
  • 请求一个链接的时候,通常在第一次请求发起的时候没有什么问题,能很快的拿到数据,但是往后再去请求的时候就会等待很久,而且最后会请求失败,一直找不到原因所在,最后查看log发现这个请求抛出了一个异常:  ...
  • 项目中有两个web应用(W1、W2)使用Netty调用同一个后台服务S1。开始都是正常的,运行一段时间(不确定多长时间)后,W1-S1可正常请求-...有没有人知道是什么原因?最近生产的rpc框架时不时报这种请求异常出来,急!
  • 发送 POST 请求出现异常!java.net.MalformedURLException: no protocol: resultUrl at java.lang.reflect.Method.invoke(Method.java:597) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction...
  • NodeJS模块背后的想法非常简单:提供最简单的接口,以向暴露JSON数据的不同Web服务发出异步请求,并在完成所有HTTP请求并处理HTTP异常后返回包含所有信息的复合JSON消息。 。 JSON Raver在以下情况下适合您... 您...
  • 今天在ORACLE数据库服务器上修改了主机名,没有修改IP,并且重新配置了listener.ora和tnsnames.ora 在服务器端使用SQLPLUS可以正常登录,但是客户机PL/SQL怎么也登不上,一直报 ... 这可能是什么原因呢?
  • 5XX错误是由服务器返回的状态代码,当服务器遇到这使它不能满足来自客户端的请求的意外情况。500内部服务器错误包含很多种情况,不能确切知道到底是哪个异常导致的。于是很难解决这个错误,因为它可以由许多不同的...
  • 找了好久没有找到什么原因引起的。 <p>java.io.IOException: 远程主机强迫关闭了一个现有的连接。 at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[na:1.8.0_131] at sun.nio.ch.SocketDispatcher.read...
  • function userTest(){ $.ajax({ type: "post", url: "getStatistics.jspx?branch=storage", ...以上ajax请求alert出来的是我当前页面的源代码 而不是服务器发送的数据,为什么啊 服务端没有异常抛出~
  • 今天遇到一个问题,当配置好的前端工程放到服务器上使用nginx启动的时候,报了405 Not allowed 异常,在网上百度了一下,说是这个问题出现的原因是因为使用了post 请求去获取静态资源,我觉得很奇怪,请求的接口都是...
  • - 系统调用:应用程序主动向操作系统发出的服务请求 - 异常:非法指令或者其他原因导致当前指令执行失败后的处理请求(软中断) - 中断:来自硬件设备的处理请求 1.为什么需要中断、异常和系统调用 在计算机...
  • 请求一个链接的时候,通常在第一次请求发起的时候没有什么问题,能很快的拿到数据,但是 往后再去请求的时候就会等待很久,而且最后会请求失败,一直找不到原因所在,最后查看log发现这个请求抛出了一个异常: ...
  • 项目是部署在阿里云下面的,在测试服务器和本地环境下通过Post 请求可以触发doPost方法,所以代码应该是没...有大佬知道是什么原因么?![图片说明](https://img-ask.csdn.net/upload/201705/20/1495274100_983036.png)
  • 操作系统——中断、异常和系统调用比较

    万次阅读 多人点赞 2015-08-09 14:09:51
    我们首先要明确,为什么操作系统需要中断、异常和系统调用:  在计算机运行时,内核是被信任的第三方 只有内核才可以...应用程序主动向操作系统发出的服务请求  异常(exception)   非法指令或者其他原因
  • 顾名思义:这个报错是没有上游可用,但是是什么原因导致呢?对于Nginx而言,出现这个报错存在很多的可能性,大致可以有:①Nginx资源不足 ②上游服务器异常 ③上游应用业务异常 等等。 然后排查过程中,需要思考的...
  • 出现异常后我们使用netstat 命令 看到NGINX与我们服务之间有大量的close_wait 产生原因 我们的角色是支付系统 业务系统->支付系统->第三方 业务系统调用我们设置了五秒未响应则主动关闭,支付系统收到关闭...
  • 练习一般的东西-不知道为什么它所谓的customermanager诚实地只是随机的东西(除了待办事项之外,缺少评论的原因)。 实施从获得的一些知识 到目前为止已实施/实施了什么 api: 储存库模式和工作单元 Http请求/响应 ...
  • 这个问题最关键的是只有**偶然**概率才会进入error,其他大部分都是正常的,说明前台和后台都是没有问题的吧,找了很久原因也没有找到,如有有遇到过这个问题的小伙伴请告知一下这个问题是什么原因以及解决方案。...
  • 但实际情况下,应用实例可能异常崩溃,又或者是网络异常原因,导致下线请求无法被成功提交。 这种情况之后,需要 Eureka Client 定时向 Eureka Server 发送续约配合 Eureka Client 通过定时任务清理超时的租约
  • 这样一来,就有可能因为网络故障等原因导致服务调用异常或延迟。如果此时调用方的请求不断增加(如网购的秒杀、抢票等场景),最后因为服务请求形成积压、阻塞,结果导致服务瘫痪,宕机,俗称“...
  • 程序包括IIS托管的服务端和客户端,通过证书进行加密,服务端和客户端各自带有一个证书和私钥,在内网服务器上测试正常,客户端能够调用服务端数据,但是服务端...请教各位高手在云服务器上出现的问题到底是什么原因
  • 什么需要熔断与服务降级 分布式系统中一个微服务需要依赖于很多的其他的服务,那么服务就会不可避免的失败。例如A服务依赖于B、C、D等很多的服务,当B服务不可用的时候,会一直阻塞或者异常,更不会去调用C服务和D...
  • 1,客户端第一次请求后,网络异常导致收到请求执行逻辑但是没有返回给客户端,客户端的重新发起请求 2,客户端迅速点击按钮提交,导致同一逻辑被多次发送到服务器 回答: 实现方法:客户端做某一请求的时候带上识别...
  • 今天这篇文章的标题是“服务器被植入挖矿木马程序纪实(第二次)”,为什么加了个“第二...首先是接到运维同事告知,说服务器有频繁的异常请求,导致端口访问被服务商阻断: 二、解决问题 有了上次的经验,首先查看...
  • 但是就是不知道为什么,把80端口改成8080端口,就会报异常,百思不得其解。 从网上搜到的信息中看,可能的原因是端口冲突和没有应用程序权限不够。端口冲突是不可能的,应该本地访问的端口不是固定的;也用管理打开...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 144
精华内容 57
关键字:

服务请求异常什么原因