监控 linux 个服务器套接字或文件

monitoring linux server sockets or files

我有一个著名的 socketexception too many open files 错误。 我在我的服务器上 运行 一个 apache http 服务器,tomcat 服务器和一个 mysql 数据库。

我用 ulimit -n 检查了打开文件的限制,结果是 1024。 如果我想检查 lsof -u tomcat 打开了多少文件,它给了我 5 mysql 也一样。我不确定是什么问题..但我也有一个 readlink 权限被拒绝。

我想监控我的套接字连接并在我的服务器上打开文件。我考虑过在 shell 脚本中使用描述的 linux 命令,然后通过邮件将它们发送给我。

我认为的另一个选择是使用 netstat 并计算可能的连接数.. 但它的加载速度非常慢并且使我的 getnameinfo 失败。

监视我遇到的错误的更好命令是什么?

编辑:

SHOW GLOBAL VARIABLES LIKE '%open%';
    Variable_name Value
    Com_ha_open 0
    Com_show_open_tables 0
    Open_files 8
    Open_streams 0
    Open_table_definitions 87
    Open_tables 64
    Opened_files 673
    Opened_table_definitions 87
    Opened_tables 628
    Slave_open_temp_tables 0



    SHOW GLOBAL VARIABLES LIKE '%open%';

    Variable_name Value
    have_openssl DISABLED
    innodb_open_files 300
    open_files_limit 2000
    table_open_cache 64



    SHOW GLOBAL VARIABLES LIKE '%connect%'

    character_set_connection latin1
    collation_connection latin1_swedish_ci
    connect_timeout 10 
    init_connect 
    max_connect_errors 10
    max_connections 400
    max_user_connections 0


    SHOW GLOBAL STATUS LIKE '%connect%';

    Variable_name Value
    Aborted_connects 1
    Connections 35954
    Max_used_connections 102
    Ssl_client_connects 0
    Ssl_connect_renegotiates 0
    Ssl_finished_connects 0
    Threads_connected 11

您可以使用 'ulimit -a' 检查 ulimit 值以确定打开文件的容量。 在 OS 命令提示符下,ulimit -n 8192 并按 enter 以动态启用更多打开文件。 要使此更改在 OS 重新启动后持续存在,下一个 URL 可以作为您的指南。

https://glassonionblog.wordpress.com/2013/01/27/increase-ulimit-and-file-descriptors-limit/

他们的示例是 500000 容量,请为您的系统使用 8192。

my.cnf [mysqld] 部分要考虑的建议,

thread_cache_size=100  # to support your max_used_connections of 102
max_user_connections=400  # from 0 to match max_connections requested
table_open_cache=800  # from 64 to reduce Opened_tables count
innodb_open_files=800  # from 300 to match table_open_cache requested

实施这些细节应避免 'too many open files' 消息。如需更多帮助,请查看配置文件、网络配置文件以获取联系信息和免费下载的实用程序脚本以协助性能调整。