精华内容
下载资源
问答
  • HTTP并发测试工具

    2018-06-20 16:59:57
    可以在windows平台测试http https并发请求。非常好用的一个工具
  • 不管多少个并行处理的CPU,在TCP新建连接时,必然要在操作上述两个数据结构时被串行化! 这是悲哀的。 我们知道,随着CPU核数的增多,每秒能接纳的连接请求也会随着增多,但由于上述两个串行化点的存在,这意味...

    2018/06/05 凌晨,雨夜!
    迟到的雨,还是来了!


    人们几乎已经逼近了单CPU的处理时延极限,于是人们希望通过多CPU的方式来提高处理带宽,从而得到更多的处理容量,理论上讲,这无可厚非,但现实中,这太难了。

    几乎所有上世纪70年代以来的操作系统都不是为多核CPU并行编程而设计的,因此当它们遇到多核CPU的各种问题时,无一不是东填西补,最终情况依然不容乐观。这里说一个典型的,就是Linux内核协议栈的可伸缩性(scalable)问题,本文主要描述TCP新建连接方面的一个可伸缩性优化措施。


    传统上讲,Linux内核协议栈针对同一个Listener的TCP新建连接处理主要拥有两个瓶颈点:

    • 单一的accept队列
    • 单一的hash表(其实是两张,listener hash,establish hash)

    TCP的新建连接会频繁操作上述两个数据结构,在多核CPU情况(后面简称SMP)下,为了保证数据的一致性,lock是绕不开的。不管多少个并行处理的CPU,在TCP新建连接时,必然要在操作上述两个数据结构时被串行化!这是悲哀的。

    我们知道,随着CPU核数的增多,每秒能接纳的连接请求数也会随着增多,但由于上述两个串行化点的存在,这意味着lock冲突也会相应的增多!串行化的lock冲突意味着什么?请考虑地铁站入口,人们从多个大门涌入,最终却只有一个安检点,过了这个安检点又呈现了多个闸机…

    最终,随着CPU核数的增多,性能并没有能线性地增长,最终的CPU核数/性能曲线便呈现了一种上凸的趋势。这一切都是因为锁。

    我们来看一下如何进一步拆解上面两个问题。本文主要描述如何把锁进行更加细粒度的拆解,下一篇文章聊聊cache相关的内容。


    单一accept队列问题的解锁

    非常幸运,这个问题已经被google的reuseport机制解决了。详情请自行搜索reuseport相关的资料。

    值得一提的是,新浪的fastsocket在google的reuseport机制基础上做了一个比较优雅的封装,使得应用程序不用修改就能享受到reuseport的收益,同时进一步地提高了TCP连接的可伸缩性问题。它的项目地址是:https://github.com/fastos/fastsocket

    我是在2015年中接触到这个项目的,当时感觉这种实现非常棒。

    单一establish hash表问题的解锁

    根据我上周的压测,CPS数据获取过程中,短链接会频繁操作establish hash表,频繁调用inet_hash,inet_unhash两个函数(listener hash并不必在意,因为listener socket比较稳定,不会频繁生成和销毁),其中的热点在两个spinlock:

    bool inet_ehash_insert(struct sock *sk, struct sock *osk)
    {
        struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo;
        struct hlist_nulls_head *list;
        struct inet_ehash_bucket *head;
        spinlock_t *lock;
        bool ret = true;
    
        WARN_ON_ONCE(!sk_unhashed(sk));
    
        sk->sk_hash = sk_ehashfn(sk);
        head = inet_ehash_bucket(hashinfo, sk->sk_hash);
        list = &head->chain;
        // 以hash bucket来lock!!
        lock = inet_ehash_lockp(hashinfo, sk->sk_hash);
    
        spin_lock(lock); // 串行化lock
        if (osk) {
            WARN_ON_ONCE(sk->sk_hash != osk->sk_hash);
            ret = sk_nulls_del_node_init_rcu(osk);
        }
        if (ret)
            __sk_nulls_add_node_rcu(sk, list);
        spin_unlock(lock);
        return ret;
    }

    可以看到,在当前的Linux TCP实现中,每一个hash bucket拥有一个spinlock,其实粒度已经够细了,参见我下面的文章:
    Linux socket hash查找的持续优化历程https://blog.csdn.net/dog250/article/details/80490859
    在以往的年代,这里的性能更加糟糕!上述代码是4.14内核,几乎就是最新的版本了,我们看一下它的示意图:
    这里写图片描述

    上图的窘局其实是可以破解的,只需要把per slot的spinlock再做细分即可,改为per slot per CPU的spinlock,其实就是把每一个slot的链表摊开成per cpu的即可。这里决定一个socket应该给哪个CPU先使用一个最简单的策略,即调用inet_hash的时候哪个CPU在处理,就给哪个CPU。

    为此,我们需要修改下面的数据结构:

    struct inet_ehash_bucket {
        struct hlist_nulls_head chain;
    };

    这个数据结构便是上图中slot,我们需要将其改成:

    struct inet_ehash_bucket {
        // struct hlist_nulls_head chain[NR_CPUS]
        struct hlist_nulls_head *chain;
    };

    我们稍微修改一下insert函数:

    bool inet_ehash_insert(struct sock *sk, struct sock *osk)
    {
        struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo;
        struct hlist_nulls_head *list;
        struct inet_ehash_bucket *head;
        spinlock_t *lock;
        bool ret = true;
        // 取当前CPU!
        int cpu = smp_processor_id();
    
        WARN_ON_ONCE(!sk_unhashed(sk));
    
        sk->sk_hash = sk_ehashfn(sk);
        sk->sk_hashcpu = cpu;
        head = inet_ehash_bucket(hashinfo, sk->sk_hash);
        // 取出对应CPU的list
        head = &head[cpu];
        list = &head->chain;
        lock = inet_ehash_lockp(hashinfo, sk->sk_hash);
        // 取出对应CPU的lock
        lock = &lock[cpu];
    
        spin_lock(lock);
        if (osk) {
            WARN_ON_ONCE(sk->sk_hash != osk->sk_hash);
            ret = sk_nulls_del_node_init_rcu(osk);
        }
        if (ret)
            __sk_nulls_add_node_rcu(sk, list);
        spin_unlock(lock);
        return ret;
    }

    是不是简单快捷呢?对应的lookup也要修改,在lookup的过程中,不再recheck slot的一致性,而要recheck CPU的一致性:

    struct sock *__inet_lookup_established(struct net *net,
                      struct inet_hashinfo *hashinfo,
                      const __be32 saddr, const __be16 sport,
                      const __be32 daddr, const u16 hnum,
                      const int dif, const int sdif)
    {
        INET_ADDR_COOKIE(acookie, saddr, daddr);
        const __portpair ports = INET_COMBINED_PORTS(sport, hnum);
        struct sock *sk;
        const struct hlist_nulls_node *node;
        unsigned int hash = inet_ehashfn(net, daddr, hnum, saddr, sport);
        unsigned int slot = hash & hashinfo->ehash_mask;
        struct inet_ehash_bucket *head = &hashinfo->ehash[slot];
        int cpu = smp_processor_id(), self; // 从当前CPU开始!如果底层有做CPU绑定的话,这样做就对了。
    
        self = cpu;
    
    begin:
        head = &head[cpu];
        if (hlist_nulls_empty(&head->chain)) {
            goto recheck2;
        }
        sk_nulls_for_each_rcu(sk, node, &head->chain) {
            ... // 逻辑不变,省略
        }
        if (get_nulls_value(node) != cpu) {
            cpu = 0;
            goto begin;
        } else if (get_nulls_value(node) == cpu) {
    recheck2:
            cpu ++;
            if (cpu >= nr_cpu_ids)
                cpu = 0;
            if (cpu == self)
                goto out;
            goto begin;
        }
    out:
        sk = NULL;
    found:
        return sk;
    }

    同时,ehash的每一个slot在初始化的时候,都要初始化成per CPU的(当然,我这里还没有用per CPU的API),并且把hlist的null尾用CPU id来初始化!

    现在让我们看看采用per slot per CPU的新方案后,局面在观感上变成了什么样子:

    这里写图片描述

    我们知道,spinlock是不可睡眠的,除了被硬中断打破,所有的CPU在调用inet_hash的时候,几乎都是可以无竞争不自旋立即完成的。但是你可能注意到了,我在上文中没有提到inet_unhash的调用,我们知道,unhash的时候也是要持有spinlock的,如何来保证unhash的调用者和当初hash的调用者是同一个CPU呢?

    答案显然是不能保证,因此正如nf_conntrack里unconfirm list和dying list的per cpu处理那般,在调用unhash的时候,cpu变量必须从socket里面取出来:

    void inet_unhash(struct sock *sk)
    {
        struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo;
        spinlock_t *lock;
        bool listener = false;
        int done;
    
        if (sk_unhashed(sk))
            return;
    
        if (sk->sk_state == TCP_LISTEN) {
            lock = &hashinfo->listening_hash[inet_sk_listen_hashfn(sk)].lock;
            listener = true;
        } else {
            // 取出hash时的cpu,确保从哪里insert就从哪里remove时而一致性。
            int cpu = sk->sk_hashcpu;
            if (cpu != smp_processor_id()) {
                DEBUG("Shit!:%d", misstat++);
            }
            lock = inet_ehash_lockp(hashinfo, sk->sk_hash);
            lock = &lock[cpu];
        }
        spin_lock_bh(lock);
        ...
    }

    现在问题来了。由于Linux调度器的调度策略影响,很有可能调用unhash时的CPU已经不是当初调用hash时的那个CPU了,最终在别的CPU上处理的unhash过程还是可能和其它一个调用hash过程的CPU竞争同一把锁。然而这是没有办法的,调度器不属于协议栈的范畴,我们能做的,仅仅是避免这种情况的发生,比如通过外部的机制或者工具,对进程和CPU进行强绑定或者弱绑定,尽最大的努力避免进程在CPU之间乒乓!


    预告

    下一篇准备写一下单纯的Linux内核版本的spinlock存在什么问题已经如何去优化它,只要本周大雨持续,我便有更多的时间在雨夜写作,敬请期待!


    我的懒惰愚笨之回顾

    做出本文描述的这个优化是我周日一天完成的,后来简单压测,发现spinlock热点真的消失了,TCP CPS在我的虚拟实验环境下8核心CPU提高了30%多!很可观的数据了!这还是盲写第一版的简单测试,没有任何进一步调优。当然了,简单配置一下RPS和CPU绑定还是需要的,我说的是代码就这样子了,没有任何进一步的优化。所以总体上讲,我是快乐的!更让我快乐的是,深圳在接下来的一周,持续局部大到暴雨,我并不晓得局部到底在哪里,有时间的话,我会去追。

    我不但不擅长大段大段地写代码,也不擅长搬运东西,切菜洗碗也慢,造成这一切的根源就在于我很懒惰,并且也并不聪明,所以在解决任何问题的时候,我都企图寻求最简单的方案,因为我并不聪明,所以如果我找不到,我会去请教聪明的人,希望他们告诉我,迷信点说,我一直都需要点石成金之术,和所有人一样。

    和很多人不同的是,他们很聪明却也不去思考,而我虽然愚笨,却一直在努力。

    就好比做饭,菜谱超过8步骤,我就放弃,因为太麻烦,用料超过10种,放弃,因为太麻烦,但我依然思考我如何能用最简单的步骤最少的食材做出美味;就好比旅游,我一个人的话,最多一个背包,或者什么都不带,跟别人一起,箱子背包超过3个我就会烦,因为我不擅长搬运,然而我还是会去想如何才能避免搬运大件物品,所以我很擅长打包!

    不管怎么说,懒惰和愚笨已经深入到我生活,工作,学习,娱乐的方方面面,我相信很多人跟我一样,因为我相信正态分布和幂律,你永远不要说自己很另类,大部分的所谓自我都处在总人口的长尾。我了解这个事实并且正视它,但很多人不了解且试图规避它,我可以给他们以帮助并且实际上也真的帮助了。这也许就是我虽然不善交际,但也在很多圈子中的原因吧…

    展开全文
  • 并发测试工具

    万次阅读 热门讨论 2019-06-15 14:40:47
    并发测试工具 一、Postman Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便...

    并发测试工具

    一、Apache Bench简介

    ApacheBench 是 Apache 服务器自带的一个web压力测试工具,简称ab。ab又是一个命令行工具,对发起负载的本机要求很低,根据ab命令可以创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问,因此可以用来测试目标服务器的负载压力。总的来说ab工具小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。

     

    使用说明

    用法很简单,使用ab命令就可以

    参数说明:
    格式:ab [options] [http://]hostname[:port]/path
    ​
    -n requests Number of requests to perform     //本次测试发起的总请求数
    -c concurrency Number of multiple requests to make   //一次产生的请求数(或并发数)
    -t timelimit Seconds to max. wait for responses    //测试所进行的最大秒数,默认没有时间限制。
    -r Don't exit on socket receive errors.     // 抛出异常继续执行测试任务 
    -p postfile File containing data to POST  //包含了需要POST的数据的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt
    ​
    -T content-type Content-type header for POSTing
    //POST数据所使用的Content-type头信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p)
    -v verbosity How much troubleshooting info to print
    //设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。
    -C attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3” (repeatable)
    //-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复,用逗号分割。
    提示:可以借助session实现原理传递 JSESSIONID参数, 实现保持会话的功能,如-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。
    -w Print out results in HTML tables  //以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
    -i Use HEAD instead of GET
    -x attributes String to insert as table attributes
    -y attributes String to insert as tr attributes
    -z attributes String to insert as td or th attributes
    -H attribute Add Arbitrary header line, eg. ‘Accept-Encoding: gzip’ Inserted after all normal header lines. (repeatable)
    -A attribute Add Basic WWW Authentication, the attributes
    are a colon separated username and password.
    -P attribute Add Basic Proxy Authentication, the attributes are a colon separated username and password.
    -X proxy:port Proxyserver and port number to use
    -V Print version number and exit
    -k Use HTTP KeepAlive feature
    -d Do not show percentiles served table.
    -S Do not show confidence estimators and warnings.
    -g filename Output collected data to gnuplot format file.
    -e filename Output CSV file with percentages served
    -h Display usage information (this message)

    平时使用 -n 说明请求次数,-c 说明并发量就可以了

    结果解析

    Document Path:          /index.html
    Document Length:        17784 bytes     #请求文档大小
     
    Concurrency Level:      10              #并发数
    Time taken for tests:   11.898681 seconds    #全部请求完成耗时
    Complete requests:      100            #全部请求数     
    Failed requests:        0
    Write errors:           0
    Total transferred:      1805900 bytes      #总传输大小
    HTML transferred:       1778400 bytes
    Requests per second:    8.40 [#/sec] (mean)    #每秒请求数(平均)
    Time per request:       1189.868 [ms] (mean)  #每次并发请求时间(所有并发)
    Time per request:       118.987 [ms] (mean, across all concurrentrequests
    Transfer rate:          148.17 [Kbytes/sec] received    #传输速率
     
    Connection Times (ms)           #连接时间
                          min mean[+/-sd]  median(中位值)  max
    Connect: (#连接)     59   73  11.9     72     132
    Processing: (#处理)    86   998538.7     938   2288
    Waiting: (#等待)     63   135 106.8     94    663
    Total:                 155  1072540.6    1004   2362
     
    在一定比例的请求服务时间
     
     50%   1004
     66%   1260
     75%   1452
     80%   1492
     90%   1923
     95%   2078
     98%   2352
     99%   2362
     100%  2362 (longest request)

     

    三、JMeter

    Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测 试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。

    使用说明

    由于JMeter功能非常强大,所以此处引用老_张的博客进行说明

    《jmeter:菜鸟入门到进阶系列》

    1、基础介绍 简单介绍jmeter的元件组成,作用等基础知识;

    2、录制脚本 简述了jmeter录制脚本的2种方式;

    3、元件的作用域及执行顺序 jmeter各元件的作用域及执行的顺序;

    4、Sampler之SOAP/XML-RPC Request 取样器中关于SOAP/XML-RPC Request的用法;

    5、Sampler之HTTP请求 取样器中关于HTTP请求的用法;

    6、http请求之content-type 取样器中关于HTTP请求的补充说明;

    7、Sample之JDBC Request 取样器中关于JDBC请求的用法;

    8、JDBC Request之Query Type 取样器中关于JDBC请求的补充说明;

    9、目录结构 jmeter目录结构等简单介绍;

    10、参数化 jmeter参数化的4种方式;

    11、关联之正则表达式提取器 jmeter关联之正则表达式提取器的用法;

    12、关联之XPath Extractor jmeter关联之XPath Extractor的用法;

    13、配置元件之计数器 jmeter配置元件中关于计数器的用法;

    14、配置元件之HTTP属性管理器 jmeter配置元件中关于http属性管理器的用法;

    15、函数助手 jmeter内置函数助手的简单介绍;

    16、定时器 jmeter八大元件之定时器的介绍;

    17、断言 jemter八大元件之断言的介绍;

    18、逻辑控制器 jmeter八大元件之逻辑控制器的介绍;

    19、常见问题及解决方法 jmeter使用过程中常见问题及解决方案的说明;

    20、阶梯式加压测试 jmeter扩展插件Stepping Thread Group的简单介绍;

    21、jmeter常用插件介绍 jmeter插件Transactions per Second、Response Times Over Time、PerfMon Metrics Collector的下载安装及使用;

    22、内存溢出原因及解决方法 关于jmeter做压力负载测试时候遇到内存溢出的原因和解决方法;

    23、jmeter分布式测试 关于高并发情况下分布式测试的一些技术点和注意事项;

    24、dubbo接口测试 利用jmeter的dubbo插件进行dubbo接口测试和性能测试;

    25、linux环境运行jmeter并生成报告 linux环境,非GUI模式运行jmeter脚本进行性能测试,并生成测试报告的介绍;

    26、jmeter生成HTML格式性能测试报告 jmeter生成HTML格式的性能测试报告的2种方式,以及可视化图表解析内容;

    结果解析

    展开全文
  • 并发测试工具(ubuntu 16.04)

    千次阅读 2018-11-01 19:44:46
    一、Postman 主要测试HTTP 请求,有良好的图形化界面工具 ...gt; Globals -> 添加常用的url 前缀什么的 引用时使用{{你定义的...在左侧新建一个Collections ,将一个要测试的请求save 到这个Collections中 ...

    一、Postman

    主要测试HTTP 请求,有良好的图形化界面工具

    小技巧:点击右上角设计符号 -> Globals -> 添加常用的url 前缀什么的

    引用时使用{{你定义的变量名}} ,这东西相当于一个全局变量,这个东西可以通过

    改变值来测试不同的环境。

    如何测试并发:

    在左侧新建一个Collections ,将一个要测试的请求save 到这个Collections中

    Collections 右上角的小三角-> run iterations 中添加总请求数, delay 中填写每次请求的延时

    -> Run ...

    二、Apache bench

    Apache bench 安装与常用参数介绍

    https://blog.csdn.net/fdipzone/article/details/9090625

    常用简单命令

    ab -n <总请求数> -c <并发数> <address>

    三、JMeter

    安装与使用

    https://www.cnblogs.com/EasonJim/p/7443875.html

    测试计划->添加->线程-> 用户组

    线程数:表示模拟的用户数量

    循环次数: 表示一个虚拟用户做多少次测试

    选中刚才新建的线程组 -> 添加 -> 取样器 -> HTTP 请求

    填写 名称,协议(http),服务器或者IP地址,端口号,方法,路径,编码(utf-8) 

    在这个HTTP请求上添加两个监听器:图形结果,查看结果树

    展开全文
  • 远程桌面超出最大连接数的解决方法 解决方法1】 1、找到一台能连上网络的windows2003的机器 2、开始–运行–输入“tsmmc.msc”,跳出一个远程桌面控制台 3、右键点击左边的“远程桌面”,选择“新建远程桌面”,...

    远程桌面超出最大连接数的解决方法/2003

    解决方法1】

    1、找到一台能连上网络的windows2003的机器
    2、开始–运行–输入“tsmmc.msc”,跳出一个远程桌面控制台
    3、右键点击左边的“远程桌面”,选择“新建远程桌面”,按照要求填写要连接的虚拟主机的ip、用户名、密码、域名,然后点击“确定”
    4、点击新建好的远程桌面,就可以登陆到远程虚拟主机了

    【解决方法2】

    故 障详情:用远程桌面链接登录到终端服务器时经常会遇到“终端服务器超出最大允许链接数”。 诸如此类错误导致无法正常登录终端服务器,引起该问题的 原因在于终端服务的缺省链接数为2个链接,并且当登录远程桌面后如果不是采用注销方式退出,而是直接关闭远程桌面窗口,那么实际上会话并没有释放掉,而是 继续保留在服务器端, 这样就会占用总的链接数,当这个数量达到最大允许值时就会出现如图2-1所示的无法连接的故障提示。

    在这里插入图片描述

    解决办法:
    1、本地电脑,依次:开始 ==> 运行 ==> 输入: mstsc /admin 如图2-2所示:

    在这里插入图片描述

    2、输入完成后点击确定回车,回车后,看到熟悉的远程桌面连接窗口,如图2-3所示。再输入远程所需要的用户名和密码,点击连接,重新登陆,即可默认强制登陆到服务器的0用户下
    在这里插入图片描述

    OK.解决了!注:当然您也可以直接重启服务器来解决该问题,但不提倡!

    【扫尾工作】
    1、登陆到远程虚拟主机后,打开“任务管理器”,选择“用户”,踢掉那2个留在系统中的用户
    2、开始-运行-gpedit.msc-计算机配置-管理模板-windows组件-终端服务-会话,右边窗口选择“为断开的会话设置时间限制”-选择已启用,设置一个时间
    win2K/win2003终端服务器超出最大允许连接数的问题
    一、用注销来退出远程桌面而不是直接关闭窗口

    二、限制已断开链接的会话存在时间

    1、从终端服务配置中修改
    运行-Tscc.msc(终端服务配置)-连接-双击RDP-Tcp或右击-属性-会话-选中第一个的替代用户设置(O)-结束已断开的会话[将默认值“从不”改为一个适当的时间,比如30分钟]

    2、从组策略修改
    开始-运行-gpedit.msc-计算机配置-管理模板-windows组件-终端服务-会话右边窗口选择 为断开的会话设置时间限制 -选择已启用,选择一个时间

    三、增加最多链接数

    1、 从终端服务配置中修改:运行-Tscc.msc(终端服务配置)-连接-双击RDP-Tcp或右击-属性,选择“网卡”选项卡-修改“最大连接数”改成你 所需的值,当然这个值不也能太大,否则会占用较多的系统资源。不过这里修改的值好像不起作用,设置成无限制时照样还是会出现本文所说的情况。

    2、组策略级别要高于终端服务配置,当启用组策略后终端服务配置中的相应选项会变成灰色不可修改
    运行-gpedit.msc-计算机配置-管理模板-Windows组件-终端服务双击右边的”限制连接数量“-选择”已启用“-填入允许的最大连接数

    四、改变远程终端模式

    打开“控制面板”,双击“添加删除程序”,单击“添加删除Windows组件”,“组件”,在Windows组件向导对话框中选中“终端服务” , “下一步”,“应用服务器”,“下一步”,然后按照提示即可改变终端服务的模式。
    Windows 2000终端服务有2种运行模式: 远程管理模式和应用程序服务器模式。远程管理模式允许系统管理员远程管理服务器,而且只允许2个终端会话同时登录终端服务器。应用程序服务器模式允许用户 运行一个以上应用程序,允许多个用户从终端登录访问服务器。但是,应用终端服务的用户必须有终端服务授权,即必须在90天之内在这个域或工作组中设置终端 服务授权服务器,否则用户需删除应用程序,然后再重新安装。

    五、修改本地安全策略

    控制面板>>管理工具>>本地安全策略>>本地策略>>安全选项>>

    1、先找到>>Microsoft网络服务器:在挂起会话之前所需的空闲时间默认为:15分钟,改为自己所需要的时间(就是登陆后无动作空闲超过多少时间后自动断开)

    2、然后找到>>网络安全:在超过登录时间后强制注销。默认为:已禁用,一定要改为:已启用

    如果已经发生解决办法:
    1、首先你可以telnet到此主机上(不管你用哪种方法),当然如果能直接操作机器更好,不过直接操作就不必用命令行了,那当然是知道机器超级管理员的密码的情况下,可以使用OpenTelnet来打开远程服务器的Telnet端口。
    2、Telnet上去后,先看登陆的用户:
    输入命令:query user
    系统返回:
    C:>query user

    此时可以看出的可能都不一样,根据具体情况而定。找出断开了但是仍然占用系统资源和通道的用户,我们要把它踢掉。如下进行操作即可。
    输入命令:logoff 1
    3、如果服务器关闭了telnet功能(这是默认的),还可以通过SqlServer的xp_cmdshell扩展存储过程,使用格式:master.dbo.xp_cmdshell ’
    命令内容’,其余可参考第二步。此方式要求有访问xp_cmdshell的权限
    上面的解决办法基本没有用 后来我用 服务器终端服务器超出最大允许连接数时,以前考虑用冷启动服务器,但这样必须跑一趟机房,最近发
    现最好的办法就是在“运行”命令行里输入:mstsc /console /v:你的服务器IP:远程端口

    远程桌面超出最大连接数/实现多用户远程桌面

    1.本经验需要设置终端设置,需要打开【控制面板】—【系统和安全】
    在这里插入图片描述

    2.进入系统和安全----管理工具点击进入(也可以直接在开始菜单里面去找管理工具)
    在这里插入图片描述
    3.如果是2003的话就显示远程桌面配置,08系统是分开【远程桌面服务】

    在这里插入图片描述

    4.设置远程桌面连接数
    在这里插入图片描述
    打开【远程桌面会话主机配置】,如图找到RDP-TCP属性
    5.把【网络适配器】选项里面把 最大连接数设置为需要设置的数值,如2

    在这里插入图片描述

    设置一个账号多地方登陆
    1.设置一个账号多地方登陆也需你会发现如果设置了多连接之后,一个用户还是不能多个地方登陆。后面登陆的会自动注销T出之前的administrator
    在这里插入图片描述
    2.这里我们需要点击设置服务器配置,把【限制每个用户只能进行一个会话】关闭
    在这里插入图片描述
    3.刷新策略
    在这里插入图片描述
    在这里插入图片描述
    设置好以上配置之后,刷新一下策略。如图 gpudate 刷新或者注销重启系统也可以
    测试多用户远程桌面

    在这里插入图片描述
    设置好之后,我们再次连接你会发现可以同时使用administrator 多个地方同时连接08系统啦

    **

    Windows Server2008 开启多用户远程链接

    **
    如何是经常使用远程桌面的人,可能会注意到,Windows server 2008 R2中,远程桌面最多只同时允许两个人远程连接,但是实际环境中有一些服务器可能有许多人需要同时连接上去,所以再这里就简单介绍一下在Windows Server
    2008 R2上如何设置多用户远程连接同一台服务器。

    1.打开需要远程连接的服务器的系统属性,开启远程连接
    在这里插入图片描述

    2、 在远程桌面会话主机配置中将“限制每个用户只能进行一个会话”的勾去掉。
    在这里插入图片描述
    在这里插入图片描述
    3.安装远程服务
    打开服务器上的添加角色向导,在“服务器角色”中勾选“远程桌面服务”并点击下一步,然后选择“远程桌面会话主机”,点击下一步
    在这里插入图片描述
    在这里插入图片描述

    1. 在用户和组中,将需要操作该服务器的用户添加进Administrators组中来,实际操作中建议专门新建一个远程操作的组,然后点击下一步
      在这里插入图片描述
    2. 待安装完成后,重新启动服务器。
    3. 服务器重新启动后,登录服务器并运行组策略,可以通过左下角的“开始”-“运行”-“gpedit.msc”打开组策略,在组策略中对位于“计算机配置\策略\管理模板\Windows
      组件\远程桌面服务\远程桌面会话主机\连接”中,限制连接数量中进行配置并启用该策略
      在这里插入图片描述
      在这里插入图片描述

    在这里插入图片描述
    7.
    最后,为了使策略尽快生效,可以刷使用命令“gpupdate /force”


    本文来自:
    https://blog.csdn.net/scholar_man/article/details/60570827?utm_source=copy
    https://www.cnblogs.com/likesunny/p/5555980.html
    https://blog.csdn.net/supperzhou2008/article/details/46332455?utm_source=copy

    展开全文
  • 4, TCP-Z实时显示系统当前活动的TCP连接数、半开连接数新建队列,以及上传、下载速度的历史曲线。每分钟统计更新TCP半开连接数超限警告事件次数。 // ************** 使用本补丁,为了避免发生冲突,请不要同时...
  • sqlserver连接池及查看连接数相关

    万次阅读 2017-05-09 14:37:44
    sqlserver连接池及查看连接数相关 连接超时时间已到。在尝试使用预登录握手确认时超过了此超时时间。这可能是因为预登录握手失败或服务器未能及时响应。 尝试连接到 Principle 服务器时发生了此故障问题
  • 4, TCP-Z实时显示系统当前活动的TCP连接数、半开连接数新建队列,以及上传、下载速度的历史曲线。每分钟统计更新TCP半开连接数超限警告事件次数。 使用本补丁,为了避免发生冲突,请不要同时使用同类补丁。 ...
  • 2021【软件测试】面试题合集大放送

    万次阅读 多人点赞 2019-09-10 18:04:37
    黑盒测试一般用来确认软件功能的正确性和可操作性,目的是检测软件的各个功能是否能得以实现,把被测试的程序当作一个黑盒,不考虑其内部结构,在知道该程序的输入和输出之间的关系或程序功能的情况下,依靠软件规格说明...
  • 简介:本文主要介绍把现今主流的springboot框架项目和精准测试工具进行结合和应用,通过精准测试的数据穿透、数据采集、测试用例与代码的双向追溯、数据分析等一系列精准测试的特有功能,达到对项目质量的保证。...
  • Java编写的显示器显示模式检测程序 2个目标文件 内容索引:JAVA源码,系统相关,系统信息检测 用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作...
  • [转]Perfmon - Windows 自带系统监测工具 一、 简述 可以用于监视CPU使用率、内存使用率、硬盘读写速度、网络速度等。 Perfmon提供了图表化的系统性能实时监视器、性能日志和警报管理,系统的性能日志可定义为二...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    测试开发笔记 第一章 测试基础 7 什么是软件测试: 7 ★软件测试的目的、意义:(怎么做好软件测试) 7 3.软件生命周期: 7 第二章 测试过程 8 1.测试模型 8 H模型: 8 V模型 9 2.内部测试 10 3外部测试: 10 验收...
  • Oracle连接数过多释放机制

    千次阅读 2017-12-07 11:21:32
    Oracle服务器连接数过多会当掉,把连接数过多的客户机网线拔出后,在远程Oracle上依然还会保留此用户的连接数,久久不能释放,上网查了下可以以下面方法解决。    通过profile可以对用户会话进行一定的限制,比如...
  • 百万级别长连接,并发测试指南

    千次阅读 2018-07-31 00:22:37
    都说haproxy很牛x, 可是测试的结果实在是不算满意, 越测试越失望,无论是长连接还是并发, 但是测试的流程以及工具倒是可以分享分享。也望指出不足之处。 100w的长连接实在算不上太难的事情,不过对于网上关于测试...
  • ETL之kettler工具连接数据库

    千次阅读 2018-11-01 10:37:00
    下载KETTLER 网络上有很多路径可供下载  对KETTLER的介绍网络上也有很多 而我对它的理解就是用来全量同步数据和增量同步数据,当然KETTLER的功能远不止这一点 下载KETTLER后对其进行解压...启动后右键新建转换...
  • 3, 专业图表: TCP-Z实时显示系统当前活动的TCP连接数、半开连接数新建队列,以及上传、下载速度的历史曲线。每分钟统计更新TCP新建队列超限警告事件次数。 ************* * 使用说明 * ************* 1, 手动...
  • 官方首发 阿里巴巴技术质量:Android 性能测试工具 mobileperf 开源 (天猫精灵 Android 性能测试-线下篇) Android性能测试工具mobileperf github 如果您觉得有帮助,请给个star,有问题欢迎加入文底钉钉群交流 ...
  • 如果要处理的数据量是十万级以上,Oracle数据库就是首选了。 Oracle数据库和之前学习的Sql Server,My Sql,不同。以My Sql为例,在实际应用中是一个Java 项目要对应一个数据库文件;Oracle中不建那么多数据库,...
  • Windows Server远程桌面连接数限制问题

    千次阅读 2014-01-03 14:28:03
    作在工作中,经常需要远程连接到服务器上,常常遇到“终端服务器超出最大连接数”,导致无法正常登陆服务器。下面讲解在网上流传的几种方法,来解决这一问题。解决这个现像的办法很多,如果马上需要登陆服务器,最...
  • UI自动化测试工具探索:Airtest

    千次阅读 2019-05-19 15:05:24
    Airtest Project是网易游戏内部工具团队开发并开源的一款UI自动化测试工具,据说曾经获得谷歌力挺。 AirtestIDE 是一个跨平台、多端(Windows、web、android、ios、游戏)的UI自动化测试编辑器。支持自动化脚本录制...
  • Coverity代码静态检测工具介绍

    千次阅读 2019-08-09 09:51:20
    Coverity代码静态检测工具介绍 ...
  • tcping,一个好用的TCP端口检测工具

    万次阅读 2018-05-18 22:51:37
    很多时候,我们需要测试tcp端口,ping命令虽然好用,但不能测试端口 (ping基于ICMP协议,属于IP层协议,所以无法测试传输层的TCP/UDP端口)。幸好有tcping命令,可是tcping命令用法网上讲十分简略,一个如此实用的...
  • 弱网测试,属于健壮性测试;怎么样去做弱网测试呢?...一、安装弱网测试工具-Network-Emulator-Toolkit 推荐一个工具:Network-Emulator-Toolkit,这个工具的作用主要是设置丢包率和延时; 1.安装与卸载 ...
  • Jmeter并发 测试

    千次阅读 2019-05-13 17:48:33
    Jmeter并发 测试 Jmeter是一个非常好用的压力测试工具。 Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好。 阅读目录 什么是压力测试 做压力测试的常用工具 做压力...
  • 测试】性能测试工具LoadRunner的基本使用流程

    千次阅读 多人点赞 2020-06-24 12:16:57
    功能:LoadRunner是一种适用于许多软件体系架构的自动负载测试工具,从用户关注的响应时间、吞吐量,并发用户和性能计数器等方面来衡量系统的性能表现,辅助用户进行系统性能的优化。 组成:LoadRunner主要包括三个...
  • 测试数据生成工具datafaker

    万次阅读 2019-03-30 20:36:58
    开源情况 datafaker是笔者开发的一个大批量测试数据和流测试数据生成工具,兼容python2.7和python3.4+,欢迎下载使用。github地址为: ...新建表后,需要构造数据库测试数据,生成接口数据提供给前端使...
  • 文章目录1,安装Virbox用户工具(Linux)1.1,查看系统位数1.2,下载相应安装包1.3,...Virbox用户工具的使用3.1,启动3.2,设置Virbox用户工具为服务器客户端模式3.3,添加可使用的网络服务器3.4,设置代理服务器3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,275
精华内容 29,310
关键字:

新建连接数测试工具