精华内容
下载资源
问答
  • MySQL查看当前连接数连接数和最大连接数
    千次阅读
    2021-01-19 12:04:51

    原标题:MySQL查看当前连接数、连接数和最大连接数

    MySQL查看当前所有连接的详细资料:

    mysqladmin -u root -p processlist

    MySQL查看当前连接数(Threads为连接数)

    mysqladmin -u root -p status

    Uptime: 1047464 Threads: 22 Questions: 1494780 Slow queries: 0 Opens: 31357 Flush tables: 1 Open tables: 1981 Queries per second avg: 1.427

    MySQL显示哪些线程正在运行

    只列出前100条:show processlist;

    全部列出:show full processlist;

    查看mysql连接数和最大连接数:

    通常,mysql的最大连接数默认是100, 最大可以达到16384。

    1、查看最大连接数:

    show variables like '%max_connections%';

    2、修改最大连接数

    方法一:修改配置文件。推荐方法一

    进入MySQL安装目录 打开MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MySQL即可.

    方法二:命令行修改。不推荐方法二

    命令行登录MySQL后。设置新的MySQL最大连接数为200:

    MySQL> set global max_connections=200。

    这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。

    (责任编辑:最模板)

    更多内容,参考最模板网站()

    百度一下,最模板。

    责任编辑:

    更多相关内容
  • 1、查看最大连接数show variables like '%max_connections%';2、修改最大连接数set GLOBAL max_connections = 200;以下的文章主要是向大家介绍的是MySQL最大连接数的修改,我们大家都知道MySQL最大连接数的默认值是...

    1、查看最大连接数

    show variables like '%max_connections%';

    2、修改最大连接数

    set GLOBAL max_connections = 200;

    以下的文章主要是向大家介绍的是MySQL最大连接数的修改,我们大家都知道MySQL最大连接数的默认值是100, 这个数值对于并发连接很多的数据库的应用是远不够用的,当连接请求大于默认连接数

    后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些。在使 用MySQL数据库的时候,经常会遇到这么一个问题,就是“Can not connect to MySQL server. Too many connections”

    -mysql 1040错误,这是因为访问MySQL且还未释放的连接数目已经达到MySQL的上限。通常,mysql的最大连接数默认是100, 最大可以达到16384。

    常用的修改最大连接数的最常用的两种方式如下:

    第一种:命令行查看和修改最大连接数(max_connections)。

    >mysql -uuser -ppassword(命令行登录MySQL)

    mysql>show variables like 'max_connections';(查可以看当前的最大连接数)

    msyql>set global max_connections=1000;(设置最大连接数为1000,可以再次查看是否设置成功)

    mysql>exit

    这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对

    其配置文件做更改。

    第二种:通过修改配置文件来修改mysql最大连接数(max_connections)。

    这种方式说来很简单,只要修改MySQL配置文件my.ini 或 my.cnf的参数max_connections,将其改为max_connections=1000,然后重启MySQL即可。但是有一点最难的就是 my.ini这个文件在哪找

    。通常有两种可能,一个是在安装目录下,另一种是在数据文件的目录下,安装的时候如果没有人为改变目录的话,一般就在 C:/ProgramData/MySQL往下的目录下,linux系统中一般在/etc目录下。

    其他需注意的:

    在编程时,由于用MySQL语句调用数据库时,在每次之执行语句前,会做一个临时的变量用来打开数据库,所以你在使用MySQL语句的时候,记得在每次调用完MySQL之后就关闭MySQL临时变量。

    另外对于访问量大的,可以考虑直接写到文本中,根据预测的访问量,先定义假若是100个文件文件名,需要的时候,再对所有文本文件中的数据进行分析,再导入数据库。

    如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接

    怎么进入mysql命令行呢? mysql的安装目录下面有个bin目录,先用命令行进入该目录,然后用 mysql -uroot -p123456 来登录(注意:用户名和密码不用包含“”)

    命令: show processlist;

    如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。

    show processlist;只列出前100条,如果想全列出请使用show full processlist;

    mysql> show processlist;

    命令: show status;

    命令:show status like '%下面变量%';

    Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。

    Aborted_connects 尝试已经失败的MySQL服务器的连接的次数。

    Connections 试图连接MySQL服务器的次数。

    Created_tmp_tables 当执行语句时,已经被创造了的隐含临时表的数量。

    Delayed_insert_threads 正在使用的延迟插入处理器线程的数量。

    Delayed_writes 用INSERT DELAYED写入的行数。

    Delayed_errors 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。

    Flush_commands 执行FLUSH命令的次数。

    Handler_delete 请求从一张表中删除行的次数。

    Handler_read_first 请求读入表中第一行的次数。

    Handler_read_key 请求数字基于键读行。

    Handler_read_next 请求读入基于一个键的一行的次数。

    Handler_read_rnd 请求读入基于一个固定位置的一行的次数。

    Handler_update 请求更新表中一行的次数。

    Handler_write 请求向表中插入一行的次数。

    Key_blocks_used 用于关键字缓存的块的数量。

    Key_read_requests 请求从缓存读入一个键值的次数。

    Key_reads 从磁盘物理读入一个键值的次数。

    Key_write_requests 请求将一个关键字块写入缓存次数。

    Key_writes 将一个键值块物理写入磁盘的次数。

    Max_used_connections 同时使用的连接的最大数目。

    Not_flushed_key_blocks 在键缓存中已经改变但是还没被清空到磁盘上的键块。

    Not_flushed_delayed_rows 在INSERT DELAY队列中等待写入的行的数量。

    Open_tables 打开表的数量。

    Open_files 打开文件的数量。

    Open_streams 打开流的数量(主要用于日志记载)

    Opened_tables 已经打开的表的数量。

    Questions 发往服务器的查询的数量。

    Slow_queries 要花超过long_query_time时间的查询数量。

    Threads_connected 当前打开的连接的数量。

    Threads_running 不在睡眠的线程数量。

    Uptime 服务器工作了多少秒。

    1、mysql服务器的线程数查看方法:

    show global status like 'Thread%';

    Threads_created:创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值

    2、优化参数thread_cache_size

    thread_cache_size:当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)

    即可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请

    求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能。

    thread_cache_size大小的设置:

    如果是短连接,适当设置大一点,因为短连接往往需要不停创建,不停销毁,如果大一点,连接线程都处于取用状态,不需要重新创建和销毁,所以对性能肯定是比较大的提升。

    对于长连接,不能保证连接的稳定性,所以设置这参数还是有一定必要,可能连接池的问题,会导致连接数据库的不稳定性,也会出现频繁的创建和销毁,但这个情况比较少,如果是长连接,可以设

    置成小一点,一般在50-100左右。

    物理内存设置规则:通过比较Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。(-->表示要调整的值) 根据物理内存设置规则如下:

    1G ---> 8

    2G ---> 16

    3G ---> 32

    >3G ---> 64

    查询thread_cache_size设置

    show global status like'thread_cache_size';

    优化方法:

    1、mysql> set global thread_cache_size=16

    2、编辑/etc/my.cnf 更改/添加

    thread_concurrency = 16

    3、mysql kill线程

    mysqladmin start slave stop slave kill某个连接到mysqlServer的线程

    ==================

    thread_cache_size功能在mysql数据库配置文件中是非常重要的一项功能了,如果对thread_cache_size优化做得好我们可以让服务器跑得非常快,设置不好就会发现很小访问量就非常的卡哦。

    thread_cache_size

    查询进程使用情况

    代码如下 复制代码

    mysql> show global status like ‘Thread%’;

    +——————-+———-+

    | Variable_name | Value |

    +——————-+———-+

    | Threads_cached | 26 |

    | Threads_connected | 510 |

    | Threads_created | 35168165 |

    | Threads_running | 459 |

    +——————-+———-+

    4 rows in set (0.01 sec)

    查询服务器 thread_cache_size配置

    代码如下 复制代码

    mysql> show variables like ‘thread_cache_size’;

    +——————-+——-+

    | Variable_name | Value |

    +——————-+——-+

    | thread_cache_size | 32 |

    +——————-+——-+

    1 row in set (0.00 sec)

    如果我们在MySQL服务器配置文件中设置了thread_cache_size,当客户端断开之后,

    服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。

    Threads_created表示创建过的线程数,如果发现Threads_created值过大的话,

    表明 MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值,

    根据调查发现以上服务器线程缓存thread_cache_size没有进行设置,或者设置过小,这个值表示可以重新利用保存在缓存中线程的数量,当断开 连接时如果缓存中还有空间,那么客户端的线程将被放到

    缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线 程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections

    和 Threads_created 状态的变量,可以看到这个变量的作用。(?>表示要调整的值) 根据物理内存设置规则如下:

    1G ?> 8

    2G ?> 16

    3G ?> 32

    >3G ?> 64

    展开全文
  • 1:golang mysql时,Prepare报错:dial tcp 127.0.0.1:3306: getsockopt: connection refused' ...2:mysql最大连接数和最大空闲连接数测试 测试程序: package main import ( "fmt" "database/sql" _"githu...


    1:golang mysql时,Prepare报错:dial tcp 127.0.0.1:3306: getsockopt: connection refused' 
    解决办法:查看mysql初始化时候的用户名密码是否正确

    2:mysql最大连接数和最大空闲连接数测试
    测试程序:
    package main

    import (
      "fmt"
      "database/sql"
      _"github.com/go-sql-driver/mysql" //下划线为只引入,不调用其里面的任何函数,用到了里面的init函数进行驱动初始化
      "errors"
      "time"
    )

    var db *sql.DB
    func initDB() (*sql.DB, error) {
        connectStr := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?timeout=%dms&readTimeout=%dms&writeTimeout=%dms&charset=utf8", "用户名", "密码", "hostip", 端口, "库名", 1000, 500, 500)//后面三个分别为连接超时,读超时,写超时
        db, err := sql.Open("mysql", connectStr)
        if err != nil {
            fmt.Println("open mysql err:", err)
            return nil, err
        }
        if db == nil {
            fmt.Println("mysql connection err:")
            return nil, errors.New("Mysql Connection error")
        }
        db.SetMaxOpenConns(20)
        db.SetMaxIdleConns(0)
        db.Ping()
        return db, nil
    }

    func execSql() {
            var connection_id int
            err := db.QueryRow("select CONNECTION_ID()").Scan(&connection_id)
            if err != nil {
                    fmt.Println("query connection id failed:", err)
                    return
            }

            fmt.Println("connection id:", connection_id)
    }

    func UpdateStatus(status int, length float64) error {
        stat, err := db.Prepare(fmt.Sprintf("update %s set `status` = ?, `length` = ?, `finish_time` = ? where `requestId` = ?", "saas_video_req_list"))
        fmt.Println("stat:", stat)
        if err != nil {
            fmt.Println("prepareerr:", err)
            return err
        }
        defer stat.Close()
        requestId := "8888888888888888888"
        _, errExec := stat.Exec(status, length, time.Now().Format("2006-01-02 15:04:05"), requestId)
        if errExec != nil {
            fmt.Println("execerr:", errExec)
            return errExec
        }
        fmt.Println(length)
        return nil
    }

    func main() {

        var err error
        if db, err = initDB(); err != nil {
            fmt.Println("init db err:", err)
        }

        for i:=0; i< 15000; i++ {
            go UpdateStatus(2, float64(i))
            //execSql()

            //time.Sleep(time.Second*1)
        }
        time.Sleep(time.Second*10)
    }

    测试case1:测试连接泄露的情况
    步骤1:查看一下mysql中设置的最大连接数
    mysql> show variables like '%max_connections%';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | max_connections | 10000 |
    +-----------------+-------+
    1 row in set (0.00 sec)

    mysql>

    可以看到最大连接数为10000,所以将调用UpdateStatus函数的地方设置为15000个,并且注释掉函数中的defer stat.Close()一行,手动让连接数泄露,即我打开连接之后不关闭。即便打开之后关闭,同时打开的也不能超过数据库中的最大连接数,否则还是报如下信息。

    可以看到在执行mysql建立新的连接的时候,会出现错误信息:
    prepareerr: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)
    prepareerr: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)
    prepareerr: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)
    execerr: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)
    execerr: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)
    prepareerr: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)
    execerr: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)

    结论:1:在有连接泄露的情况下,如果当时同时连接的个数超过了数据库中的最大连接数,则会出现再进来的mysql执行失败的情况。很危险,如果线上同时出现的连接数超过的mysql设置的最大的连接数,则后面的mysql语句会执行失败。
          2:将main函数中的for循环改成小于10000时,即使不执行defer stat.Close(),也不会出现上面的mysql的错误信息。因为即便全不关,也不会超过10000,等超时时间(这个怎么看超时时间?)后,会自动关闭。
          3:将for循环改成2000,最大连接数为100(如果此值大于mysql的最大连接数,一样会出现连接数过多的错误),多次执行,不执行defer stat.Close()代码,也不会出现连接超过最大连接数的情况,说明连接数应该是会自动关闭,出了函数作用域或者程序结束的时候,连接会自动关闭。但是还是强烈建议手动关闭,因为如果线上线程数和机器数比较多,同时达到了最大连接数,一样会出事故(超时时间应该和initDB里面设置的超时时间没关系,超时时间的设置为去链接数据库的超时时间,参考链接:https://www.cnblogs.com/lanyangsh/p/11749270.html。)

    测试case2:测试SetMaxOpenConns函数功能
    步骤一:将最大连接数SetMaxOpenConns的参数设置为2,最大空闲连接数SetMaxIdleConns参数设置为0。在执行Exec会出现阻塞的情况,即如果要创建10个连接,目前最大连接数为2,则需要2的最大连接数空闲出来之后,才能给后一个连接使用。不会报错,只会阻塞。

    例如如下代码中:如果设置最大连接数为1,第二个query语句会阻塞,第二个打印打印不出来,除非调研close先关闭第一个query

    func querySql() {

        db.Query("select * from saas_video_req_list")

        fmt.Println("111111")

        _, err := db.Query("select * from saas_video_req_list") //此操作将一直阻塞

        fmt.Println("queryerr:", err)

    }

    但是调用Prepare却不会??按道理Prepare也会占有连接数。但是却没有阻塞?

         
    测试case3:将最大连接数SetMaxOpenConns的参数设置为2,最大空闲连接数SetMaxIdleConns参数设置为0。调用execSql()时,可以看到每次打印的connection_id都不相同。

    结论:如果不设置最大空闲连接数,则每次连接都创建新的connectid,可以通过打印的connection_id不同解释该结论
          
    测试case4:将最大连接数SetMaxOpenConns的参数设置为10,最大空闲连接数SetMaxIdleConns参数设置为2。每隔1s调用execSql()时,可以看到每次打印的connection_id相同的2个。如果调用过快,最大空闲连接数不够用,同样会创建新的连接。

    结论:如果连接不用了,最大空闲连接数还有空闲,则放入最大空闲连接数,以备下次使用。

    case4的测试结果:

     

    综上:

    现象1:当程序中的最大连接数的值大于数据库中最大连接数的值时,如果程序中存在没有close连接的情况,程序执行一段时间后会出现最大连接数过多的错误。

    现象2:当程序中的最大连接数的值小于于数据库中最大连接数的值时,即使程序中存在没有close连接的情况,也不会出现最大连接数过多的情况(应该是大于程序中设置的最大连接数的连接会自动释放?)

    1:程序中养成手动Close的习惯。即使全部Close,但是程序中同时连接数大于mysql的连接数,一样出现最大连接数错误,解决参看下面一条。

    2:设置程序中的最大连接数小于mysql的最大连接数。这样连接数过多会阻塞在程序中,不会影响mysql。

    3:设置最大空闲连接数,可以重复利用连接。

     

    常见的几种错误和解决办法:

    错误1:如果设置的最大连接数过大,有可能会报prepareerr: dial tcp 10.141.0.234:3306: socket: too many open files,表示你超过了机器可以创建的最大文件描述符,

    解决办法:使用ulimit -n 65535修改一下可以创建的最大文件描述符。

    错误2:Error 1040: Too many connections这个错误,则是你程序设置的最大连接数超过了数据库的最大连接数。

    解决办法:增大数据库最大连接数,或者减少程序设置的最大连接数,一般程序中设置的最大连接数没必要太大。

    错误3:Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)

    解决办法:检查程序中是否有连接泄露,比如prepare了没有close这种。或者没有泄露的情况下,同时连接数据库的操作是不是超过了数据库的最大连接数。


    参考连接:https://blog.csdn.net/lanyang123456/article/details/101947421

    展开全文
  • 查看linux中的TCP连接数

    千次阅读 2021-05-15 20:20:20
    一、查看哪些IP连接本机netstat -an二、查看TCP连接数1)统计80端口连接数netstat -nat|grep -i "80"|wc -l2)统计httpd协议连接数ps -ef|grep httpd|wc -l3)、统计已连接上的,状态为“establishednetstat -na|grep ...

    一、查看哪些IP连接本机

    netstat -an

    二、查看TCP连接数

    1)统计80端口连接数

    netstat -nat|grep -i "80"|wc -l

    2)统计httpd协议连接数

    ps -ef|grep httpd|wc -l

    3)、统计已连接上的,状态为“established

    netstat -na|grep ESTABLISHED|wc -l

    4)、查出哪个IP地址连接最多,将其封了.

    netstat -na|grep ESTABLISHED|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n

    netstat -na|grep SYN|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n

    ---------------------------------------------------------------------------------------------

    1、查看apache当前并发访问数:

    netstat -an | grep ESTABLISHED | wc -l

    对比httpd.conf中MaxClients的数字差距多少。

    2、查看有多少个进程数:

    ps aux|grep httpd|wc -l

    3、可以使用如下参数查看数据

    server-status?auto

    #ps -ef|grep httpd|wc -l

    1388

    统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器。

    表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整。

    #netstat -nat|grep -i "80"|wc -l

    4341

    netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,wc -l进行连接数统计。

    最终返回的数字就是当前所有80端口的请求总数。

    #netstat -na|grep ESTABLISHED|wc -l

    376

    netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。

    最终返回的数字就是当前所有80端口的已建立连接的总数。

    netstat -nat||grep ESTABLISHED|wc - 可查看所有建立连接的详细记录

    查看Apache的并发请求数及其TCP连接状态:

    Linux命令:

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

    (

    netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’TIME_WAIT 8947 等待足够的时间以确保远程TCP接收到连接中断请求的确认

    FIN_WAIT1 15 等待远程TCP连接中断请求,或先前的连接中断请求的确认

    FIN_WAIT2 1 从远程TCP等待连接中断请求

    ESTABLISHED 55 代表一个打开的连接

    SYN_RECV 21 再收到和发送一个连接请求后等待对方对连接请求的确认

    CLOSING 2 没有任何连接状态

    LAST_ACK 4 等待原来的发向远程TCP的连接中断请求的确认

    TCP连接状态详解

    LISTEN: 侦听来自远方的TCP端口的连接请求

    SYN-SENT: 再发送连接请求后等待匹配的连接请求

    SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认

    ESTABLISHED: 代表一个打开的连接

    FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认

    FIN-WAIT-2: 从远程TCP等待连接中断请求

    CLOSE-WAIT: 等待从本地用户发来的连接中断请求

    CLOSING: 等待远程TCP对连接中断的确认

    LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认

    TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认

    CLOSED: 没有任何连接状态

    )

    LAST_ACK 5

    SYN_RECV 30

    ESTABLISHED 1597

    FIN_WAIT1 51

    FIN_WAIT2 504

    TIME_WAIT 1057

    其中的

    SYN_RECV表示正在等待处理的请求数;

    ESTABLISHED表示正常数据传输状态;

    TIME_WAIT表示处理完毕,等待超时结束的请求数。

    ---------------------------------------------------------------------------------------------

    查看Apache并发请求数及其TCP连接状态

    查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):

    Linux命令:

    ps -ef | grep httpd | wc -l

    返回结果示例:

    1388

    表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整,我这组服务器中每台的峰值曾达到过2002。

    查看Apache的并发请求数及其TCP连接状态:

    Linux命令:

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

    返回结果示例:

    LAST_ACK 5

    SYN_RECV 30

    ESTABLISHED 1597

    FIN_WAIT1 51

    FIN_WAIT2 504

    TIME_WAIT 1057

    其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。

    状态:描述

    CLOSED:无连接是活动 的或正在进行

    LISTEN:服务器在等待进入呼叫

    SYN_RECV:一个连接请求已经到达,等待确认

    SYN_SENT:应用已经开始,打开一个连接

    ESTABLISHED:正常数据传输状态

    FIN_WAIT1:应用说它已经完成

    FIN_WAIT2:另一边已同意释放

    ITMED_WAIT:等待所有分组死掉

    CLOSING:两边同时尝试关闭

    TIME_WAIT:另一边已初始化一个释放

    LAST_ACK:等待所有分组死掉

    如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,

    vim /etc/sysctl.conf

    编辑文件,加入以下内容:

    net.ipv4.tcp_syncookies = 1

    net.ipv4.tcp_tw_reuse = 1

    net.ipv4.tcp_tw_recycle = 1

    net.ipv4.tcp_fin_timeout = 30

    然后执行 /sbin/sysctl -p 让参数生效。

    net.ipv4.tcp_syncookies = 1 表示开启SYN cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

    net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

    net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

    net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

    下面附上TIME_WAIT状态的意义:

    客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口

    状态为TIME_WAIT

    是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?

    有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?

    主动关闭的一方在发送最后一个 ack 后

    就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间

    这个是TCP/IP必不可少的,也就是“解决”不了的。

    也就是TCP/IP设计者本来是这么设计的

    主要有两个原因

    1。防止上一次连接中的包,迷路后重新出现,影响新连接

    (经过2MSL,上一次连接中所有的重复包都会消失)

    2。可靠的关闭TCP连接

    在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发

    fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以

    主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

    TIME_WAIT 并不会占用很大资源的,除非受到攻击。

    还有,如果一方 send 或 recv 超时,就会直接进入 CLOSED 状态

    如何合理设置apache httpd的最大连接数?

    手头有一个网站在线人数增多,访问时很慢。初步认为是服务器资源不足了,但经反复测试,一旦连接上,不断点击同一个页面上不同的链接,都能迅速打开,这种 现象就是说明apache最大连接数已经满了,新的访客只能排队等待有空闲的链接,而如果一旦连接上,在keeyalive 的存活时间内(KeepAliveTimeout,默认5秒)都不用重新打开连接,因此解决的方法就是加大apache的最大连接数。

    1.在哪里设置?

    apache 2.24,使用默认配置(FreeBSD 默认不加载自定义MPM配置),默认最大连接数是250

    在/usr/local/etc/apache22/httpd.conf中加载MPM配置(去掉前面的注释):

    # Server-pool management (MPM specific)

    Include etc/apache22/extra/httpd-mpm.conf

    可见的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf,但里面根据httpd的工作模式分了很多块,哪一部才是当前httpd的工作模式呢?可通过执行 apachectl -l 来查看:

    Compiled in modules:

    core.c

    prefork.c

    http_core.c

    mod_so.c

    看到prefork 字眼,因此可见当前httpd应该是工作在prefork模式,prefork模式的默认配置是:

    StartServers                      5

    MinSpareServers                   5

    MaxSpareServers                  10

    MaxClients                      150

    MaxRequestsPerChild               0

    2.要加到多少?

    连接数理论上当然是支持越大越好,但要在服务器的能力范围内,这跟服务器的CPU、内存、带宽等都有关系。

    查看当前的连接数可以用:

    ps aux | grep httpd | wc -l

    或:

    pgrep httpd|wc -l

    计算httpd占用内存的平均数:

    ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'

    由于基本都是静态页面,CPU消耗很低,每进程占用内存也不算多,大约200K。

    服务器内存有2G,除去常规启动的服务大约需要500M(保守估计),还剩1.5G可用,那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368

    约8K个进程,支持2W人同时访问应该是没有问题的(能保证其中8K的人访问很快,其他的可能需要等待1、2秒才能连上,而一旦连上就会很流畅)

    控制最大连接数的MaxClients ,因此可以尝试配置为:

    StartServers                      5

    MinSpareServers                   5

    MaxSpareServers                  10

    ServerLimit                    5500

    MaxClients                     5000

    MaxRequestsPerChild               100

    注意,MaxClients默认最大为250,若要超过这个值就要显式设置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重启httpd时会有提示。

    重启httpd后,通过反复执行pgrep httpd|wc -l 来观察连接数,可以看到连接数在达到MaxClients的设值后不再增加,但此时访问网站也很流畅,那就不用贪心再设置更高的值了,不然以后如果网站访 问突增不小心就会耗光服务器内存,可根据以后访问压力趋势及内存的占用变化再逐渐调整,直到找到一个最优的设置值。

    (MaxRequestsPerChild不能设置为0,可能会因内存泄露导致服务器崩溃)

    更佳最大值计算的公式:

    apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2

    apache_max_process = apache_max_process_with_good_perfermance * 1.5

    附:

    实时检测HTTPD连接数:

    watch -n 1 -d "pgrep httpd|wc -l"

    展开全文
  • 最大连接数与每ip连接数的限制

    千次阅读 2019-01-16 21:22:30
    一、最大连接数的限制 概念 这是指服务器可以同时接收的最大连接数,防止服务器压力过大而在应用层进行的限制。 实现 总体思路:将当前连接数保存于变量num_clients变量中,然后与配置项numble_max_clients进行...
  • 本文介绍golang 中连接MySQL时,如何设置最大连接数。 文中例子连接MySQL用的package是github.com/go-sql-driver/mysql. 设置最大连接数的接口是 func (db *DB) SetMaxOpenConns(n int) 设置连接MySQL可以...
  • 查看ftp服务器连接数命令

    千次阅读 2021-08-12 01:15:12
    查看ftp服务器连接数命令 内容精选换一换本章节适用于MRS 3.x之前版本。Loader支持以下多种连接,每种连接的配置介绍可根据本章节内容了解。obs-connectorgeneric-jdbc-connectorftp-connector或sftp-connectorhbase...
  • MySQL 连接数满情况的处理

    千次阅读 2021-01-18 18:10:18
    Can not connect to MySQL server. Too many connections”-mysql实际工作场景中我们应该都会遇到类似的故障,一般都是处理表面参数解决,今天整理一下自己对这个报错的认识吧,通过以下三点了解...查看当前连接数sh...
  • 服务器最大TCP连接数及调优汇总

    千次阅读 2020-12-24 17:33:22
    单机最大tcp连接数 在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接 在确定最大连接数之前,先来看...
  • XP系统下共享连接数上限默认为10,局域网内访问XP的共享文件夹时经常提示“XP共享拒绝访问,已达到计算机连接的数量最大值”。若考虑用XP做文件服务器,只能修改TCP/IP并发数 XP共享连接数限制解除补丁,解决XP系统...
  • 最大并发连接数是路由器的压力指标,新建连接数是路由器的性能指标
  • redis连接数配置多少

    千次阅读 2021-01-17 15:52:18
    redis客户端连接数redis通过监听一个TCP端口或socket的方式接收来自客户端的连接,当与客户端建立连接后,redis内部会进行如下操作:(1)客户端socket会被设置为非阻塞模式,因为redis在网络时间处理上采用的是非阻塞...
  • linux设置最大连接数

    千次阅读 2021-05-26 04:15:04
    这1024个文件中还得除去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听 socket,进程间通讯的unix域socket等文件,那么剩下的可用于客户端socket连接的文件就只有大概1024-10=1014个左右。...
  • Linux查看端口的连接数

    千次阅读 2021-05-11 02:50:55
    一、查看哪些IP连接本机netstat -an二、查看TCP连接数1)统计80端口连接数netstat -nat | grep -i "80" | wc -l2)统计httpd协议连接数ps -ef | grep httpd | wc -l3)统计已连接上的,状态为“establishednetstat -anp...
  • MySQL 查看最大连接数和修改最大连接数发布时间:2020-08-16 22:44:44来源:51CTO阅读:120作者:青苔初生1、查看最大连接数mysql> show variables like "%max_connections%";±----------------±------+| ...
  • MySQL 连接数和状态查看命令

    千次阅读 2021-01-19 04:25:29
    查看MySQL实例的当前连接数:show processlistshow processlist: 列出当前用户的前100条连接信息;show full processlist: 列出当前用户的所有连接信息;当root用户登陆后,能够查看所有用户的连接数;2. 查看MySQL...
  • 本文主要向大家介绍了MySQL数据库之如何实时查看mysql当前连接数? 通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。如何实时查看mysql当前连接数?1、查看当前所有连接的详细资料:./mysqladmin-uadmin...
  • 查看linux 服务器 tcp 连接数状态

    千次阅读 2021-05-12 10:19:39
    1)在linux 服务器查看tcp 连接数的命令: netstat -tan|awk '$1~/tcp/{aa[$NF]++}END{for (h in aa)print h,aa[h]}' [root@izbp14wmlq6ajvhexzq3q0z app]# netstat -tan|awk '$1~/tcp/{aa[$NF]++}END{for (h in...
  • postgresql性能优化-最大连接数

    千次阅读 2022-03-23 09:31:10
    一、最大连接数查看 postgresql数据库最大连接数是系统允许的最大连接数,当数据库并发用户超过该连接数后,会导致新连接无法建立或者连接超时。 最大连接数max_connections默认值为100。 当前总共正在使用的连接...
  • mysql最大连接数怎么设置

    万次阅读 2022-01-04 12:52:11
    设置mysql最大连接数的方法:首先打开mysql的控制台;然后输入语句【set GLOBAL max_connections=1000;】即可直接设置最大连接数。 通常,mysql的最大连接数默认是100, 最大可以达到16384;如果我们想修改mysql...
  • MySQL查看数据库连接数

    千次阅读 2021-08-30 14:05:18
    一、查看数据库连接数 a)SQL: show full processlist; 注意: 1. 若不加上full选项,则最多显示100条记录 2. 若以root帐号登录,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接 二、...
  • Nginx 最大连接数配置

    千次阅读 2022-01-10 17:02:50
    work_connections:每个工作进程可以允许同时建立的外部连接数量。 修改最大可打开文件 更改操作系统"进程最大可打开文件"的设置 首先需要操作系统的root权限,然后需要limits.conf主配置文件: [root@localhost ...
  • 前提说明 为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个...达到保护自己的同时起到连接数负载均衡的作用。 动手去做 一开始根据故障todoList提供的参数MaxKeepAliveReques...
  • 查询TCP连接数

    千次阅读 2022-04-25 15:09:13
    分别查询当前有效TCP连接数量和所有TCP连接数量。 三台主机TCP数量不均衡,导致高并发下,服务器崩溃。 后来查询是客户F5环境网络存在异常,使用ipHash 模式会只有一台节点生效。 当上万个TCP连接到一台主机时,...
  • 查看nginx的最大连接数 (1) 控制 Nginx 单个进程允许的最大连接数的参数为 worker_connections ,这个参数要根据服务器性能和内存使用量来调整 (2) 进程的最大连接数受 Linux 系统进程的最大打开文件数限制,只有...
  • tomcat调优之监控连接数和连接池

    万次阅读 2019-01-04 18:23:40
    在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 Tomcat配置文件server.xml中:Connector的主要功能,是接收连接请求,创建Request和...
  • 数据库最大连接数

    千次阅读 2020-09-16 17:08:30
    1、数据库默认的最大连接数? 最大默认连接数:100 2、查询数据库最大连接数 show variables like '%max_connections%'; 3、修改数据库最大连接数 set GLOBAL max_connections = 1000; 基本上设置最大链接数为...
  • MySQL查看最大连接数和修改最大连接数1、查看最大连接数show variables like '%max_connections%';2、修改最大连接数set GLOBAL max_connections = 200; 以下的文章主要是向大家介绍的是MySQL最大连接数的修改,...
  • 数据库连接数测试2. 透过现象看原理3. 如何合理设置数据库连接数 1. 数据库连接数测试         假如你有一个网站,压力有个1万上下的并发访问——也就是说差不多2万左右...
  • MySQL连接数太多应该怎么解决?

    千次阅读 2021-01-18 22:14:52
    MySQL数据库的默认最大连接数是:100,对于多人开发的单体项目来说,虽然我们同时在用的连接不会超过10个,理论上100 绰绰有余,但是除了我们正在使用的连接以外,还有很大一部分 Sleep 的连接,这个才是真正的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,383,150
精华内容 953,260
关键字:

连接数

友情链接: WCAD.rar