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

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相对应的等待队列上去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值