标签: file-descriptor

通过mysql.sock在重负载下的PHP/MYSQL连接失败

在问这个之前我已经做了很多阅读,所以让我先说我没有用完连接,内存或cpu,而且据我所知,我也没有用完文件描述符.

当MySQL负载很重时,这就是PHP抛出的东西:

无法通过套接字'/var/lib/mysql/mysql.sock'连接到本地MySQL服务器(11"资源暂时不可用")

这种情况在负载下随机发生 - 但我推的越多,php就越频繁地向我抛出.在发生这种情况时,我总是可以通过控制台本地连接,从PHP到127.0.0.1,而不是使用更快的unix套接字的"localhost".

这里有一些系统变量来清除常见的问题:

cat /proc/sys/fs/file-max = 4895952
lsof | wc -l = 215778 (during "outages")
Run Code Online (Sandbox Code Playgroud)

可用连接的最高使用率:26%(261/1000)

InnoDB缓冲池/数据大小:10.0G/3.7G(足够的房间)

  • soft nofile 999999
  • hard nofile 999999

我实际上在运行MariaDB(服务器版本:10.0.17-MariaDB MariaDB Server)

这些结果是在正常负载下生成的,并且通过在非工作时间运行mysqlslap来生成,因此,慢查询不是问题 - 只是高连接.

有什么建议?如有必要,我可以报告其他设置/数据 - mysqltuner.pl说一切都很好

而且,这里显而易见的事情是通过IP连接工作得很好并且在这些中断期间很快 - 我只是无法弄清楚原因.

编辑:这是我的my.ini(从我最近的故障排除更改中看,有些值似乎有点高,请记住,MySQL日志,系统日志或dmesg中没有错误)

socket=/var/lib/mysql/mysql.sock
skip-external-locking
skip-name-resolve
table_open_cache=8092
thread_cache_size=16
back_log=3000
max_connect_errors=10000
interactive_timeout=3600
wait_timeout=600                                                                                            
max_connections=1000
max_allowed_packet=16M
tmp_table_size=64M
max_heap_table_size=64M
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=8M
join_buffer_size=1M
innodb_log_file_size=256M
innodb_log_buffer_size=8M
innodb_buffer_pool_size=10G

[mysql.server]
user=mysql

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
open-files-limit=65535
Run Code Online (Sandbox Code Playgroud)

php mysql file-descriptor mariadb

15
推荐指数
1
解决办法
1698
查看次数

两个文件描述符到同一个文件

使用posix read()write()linux调用,是否保证如果我通过一个文件描述符写入并通过另一个文件描述符读取,则以串行方式使这两个动作相互排斥......我的读文件描述符总是会看到写文件描述符最后写的是什么?

我相信情况确实如此,但我想确定并且手册页对此没有太大帮助

linux posix file file-descriptor

14
推荐指数
1
解决办法
2万
查看次数

linux文件描述符限制如何工作?

我被告知我的服务器拒绝接受特定端口的客户端网络连接可能是由于缺少文件描述符.我查看了这一切,并在此处阅读:http: //www.netadmintools.com/art295.html

所以我测试了我的系统,我得到了这个:

cat /proc/sys/fs/file-nr
1088    0   331287
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我的限制很高但我有0个可用的文件描述符?为什么?我如何为我的服务器解决这个问题?

即使我关闭了我的服务器,第二列实际上仍然保持在0,甚至在启动后它甚至保持在0!

sockets linux file file-descriptor

13
推荐指数
2
解决办法
3万
查看次数

如何通过Linux shell命令关闭文件描述符

/proc/pid/fd/,文件描述符太多.我可以使用shell命令关闭这些文件描述符吗?

linux shell file-descriptor

13
推荐指数
2
解决办法
3万
查看次数

HANDLE与Linux中的文件描述符类似吗?

HANDLE与Linux中的文件描述符类似吗?据我所知,HANDLE用于处理Windows上的每个资源,例如字体,图标,文件,设备......,它实质上只是指向保存特定资源数据的内存块的void指针

c++ windows file-descriptor

13
推荐指数
1
解决办法
2万
查看次数

检查套接字是否正在C中侦听

在遍历套接字文件描述符时,如何检查其中一个是否来自被动套接字(侦听连接)?

c sockets file-descriptor

13
推荐指数
1
解决办法
4661
查看次数

C的printf和fprintf(stdout,)没有打印

这有点奇怪.我的代码没有输出我认为应该的东西.我在各个阶段添加了一些打印语句,以查看它出错的地方.依然没有.所以我在main的开头添加了一个printf语句.这就是我真的很困惑的地方.

所以我假设文件描述符发生了一些有趣的事情.我改成printffprintf.依然没有.打印到stderr fprintf确实有效!为什么会这样?

除了初始打印语句之外,从main中删除所有主体并返回打印.

int main(void) {
    fprintf(stdout, "STARTED!");
    //Create an Internet domain socket
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    //If this fails exit and print the error
    if (sockfd == -1) {
        printf("Error %d, cannot create socket", errno);
        return 1;
    }
    printf("SOCKET CREATED!");

    //Creates a socket address
    struct sockaddr_in  addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8080);
    addr.sin_addr.s_addr = INADDR_ANY;

    //Attempts to bind to the socket address, again prints to error if this fails. …
Run Code Online (Sandbox Code Playgroud)

c printf file-descriptor

13
推荐指数
1
解决办法
5万
查看次数

增加Ubuntu/Upstart的最大打开文件(initctl)

这是在Ubuntu 12.04.3 LTS服务器上.

我已将以下内容添加到/etc/security/limits.conf(我的Golang进程以root身份运行):

*      hard   nofile   50000
*      soft   nofile   50000
root   hard   nofile   50000
root   soft   nofile   50000
Run Code Online (Sandbox Code Playgroud)

我在/etc/pam.d/common-session中添加了以下内容

session required pam_limits.so
Run Code Online (Sandbox Code Playgroud)

我已将以下内容添加到/etc/sysctl.conf中:

fs.file-max = 50000
Run Code Online (Sandbox Code Playgroud)

然而当我cat/proc/{PID} /限制时,我得到:

Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 4096                 files     
Run Code Online (Sandbox Code Playgroud)

只有当我从Upstart通过sudo initctl start service_name启动进程才会发生这种情况.如果我自己开始这个过程,它会确认我的设置.

我该如何解决?

ubuntu file-descriptor upstart

13
推荐指数
1
解决办法
1万
查看次数

socket select()如何工作?

如网络编程书籍中所述,select()监视一组文件描述符以供读取.例如,以下是代码的一部分:

select(numfds, &read_fds, NULL, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

numfds是read_fds + 1中套接字的最大数量.是否意味着,每个"监视器"循环都会监视select()进程的所有文件描述符,从0到numfds?我的意思是,如果我只有两个文件描述符来监视(0和26),是否选择观察从0到26的所有描述符?

c sockets file-descriptor

12
推荐指数
2
解决办法
1万
查看次数

lsof列出的FD管道列是什么意思?

我正在使用以下命令获取管道列表:

lsof | grep PIPE 
Run Code Online (Sandbox Code Playgroud)

我想知道FD列的值是什么意思(第5页http://i.imgur.com/KHczptf.png).我认为,rw平均读取写入分别,但到底是什么下面的每一个字符,这些装置的数量?


我知道FD意味着文件描述符,我想弄清楚的是列中显示的值是什么意思,比如3r,16w,20r等.

linux shell command lsof file-descriptor

12
推荐指数
1
解决办法
2万
查看次数

标签 统计

file-descriptor ×10

linux ×4

c ×3

sockets ×3

file ×2

shell ×2

c++ ×1

command ×1

lsof ×1

mariadb ×1

mysql ×1

php ×1

posix ×1

printf ×1

ubuntu ×1

upstart ×1

windows ×1