linux内存检查及本身程序解决方案!!!

来源:互联网 发布:php开源博客系统源码 编辑:程序博客网 时间:2024/06/05 21:03

16 个需要知道的 Linux 服务器监控命令
ps -e -o ‘pid,comm,args,pcpu,rsz,vsz,stime,user,uid’ 其中rsz是是实际内存

free

cat /proc/meminfo
pgrep python
strace -p [pid]
0x1d03c90, FUTEX_WAIT_PRIVATE, 0, NULL

出现原因 : 因为有的时候队列会出现空值,这样就会造成线程阻塞
,所以进程一直挂载
参考国外大神提出的解决方案结合朋友给的意见
http://stackoverflow.com/questions/32986383/python-process-hangs-with-futex0x2a5fcc0-futex-wait-private-0-null-in-multi
一个多线程程序挂起问题解决
当使用队列的时候,每执行完就发送 task_done(),这样就不会出现阻塞的情况

futex概念

Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享 的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不 用再执行系统调用了。当通过访问futex变量告诉进程有竞争发生,则还是得执行系统调用去完成相应的处理(wait 或者 wake up)。简单的说,futex就是通过在用户态的检查,(motivation)如果了解到没有竞争就不用陷入内核了,大大提高了low-contention时候的效率。

FUTEX_WAIT: 原子性的检查uaddr中计数器的值是否为val,如果是则让进程休眠,直到FUTEX_WAKE或者超时(time-out)。也就是把进程挂到uaddr相对应的等待队列上去。

0 0
原创粉丝点击