为什么80%的码农都做不了架构师?>>>   

TBOX在调试模式下,回去自动检测每个库模块内部的线程锁的抢占情况,便于对线程做针对性的一些优化。

目前可以探测使用内置mutex、spinlock的锁抢占。在程序退出运行前,会在终端打印所有锁的抢占信息:

[tbox]: [lock_profiler]: lock: 0x7fb273000328, name: aicp, occupied: 0
[tbox]: [lock_profiler]: lock: 0x10a362858, name: thread_store, occupied: 0
[tbox]: [lock_profiler]: lock: 0x7fff55ae07e0, name: spider, occupied: 4870
[tbox]: [lock_profiler]: lock: 0x7fb2728412c8, name: thread_pool, occupied: 24
[tbox]: [lock_profiler]: lock: 0x7fb272403ae8, name: pool, occupied: 310
[tbox]: [lock_profiler]: lock: 0x7fb273000400, name: aiop, occupied: 0
[tbox]: [lock_profiler]: lock: 0x7fb27401d0e8, name: ltimer, occupied: 1
[tbox]: [lock_profiler]: lock: 0x7fb27281c278, name: cookies, occupied: 0
[tbox]: [lock_profiler]: lock: 0x7fb272403930, name: native_large_pool, occupied: 0
[tbox]: [lock_profiler]: lock: 0x7fb27281c010, name: aicp_aiop, occupied: 84
[tbox]: [lock_profiler]: lock: 0x10a57a8a8, name: transfer_pool, occupied: 22
[tbox]: [lock_profiler]: lock: 0x7fb2730004f4, name: timer, occupied: 0

例如上面的信息,是demo中的spider程序给出的锁抢占统计,其中:

  1. spider实例被抢占的最为厉害,总共4870次,可以看出,如果要提高效率,这个还需要进一步做些优化才行。
  2. 线程池总共被抢占24次
  3. 全局内存分配被强占310次
  4. aiop被抢占84次
  5. 传输池被抢占22次
  6. 定时器被抢占1次

如果上层自己的程序也想对使用的锁进行统计分析的,可以使用下面的接口来注册需要分析的锁,例如:

    <!--lang:cpp-->// 注册需要分析的锁tb_lock_profiler_register(tb_lock_profiler(), (tb_pointer_t)&thread_pool->lock, "thread_pool");

但是需要注意的一点:只能注册TBOX支持的锁类型:tb_mutex_xxx、tb_spinlock_xxx这两种锁。


  • TBOX项目详情
  • TBOX项目源码
  • TBOX项目文档

转载于:https://my.oschina.net/tboox/blog/303674

利用锁分析器进行线程竞争检测相关推荐

  1. linux下利用valgrind工具进行内存泄露检测和性能分析

    http://blog.csdn.net/yanghao23/article/details/7514587 valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简 ...

  2. 面试:史上最全多线程面试题 - (锁内存模型线程)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/xxyybs/article/detai ...

  3. java 锁_Java之线程并发的各种锁、锁、锁

    因为两周没更新了... 也不是懒,这两周确实有些忙,赶项目进度赶的不亦乐乎... 终于赶在工期前,可以进入内测了,我也有了些时间,可以更新啦... 线程并发锁是很常见的问题,而且在Java中锁的类型. ...

  4. Linux valgrind java_linux下利用valgrind工具进行内存泄露检测和性能分析

    valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简绍 Valgrind包含下列工具: 1.memcheck:检查程序中的内存问题,如泄漏.越界.非法指针等. 2 ...

  5. 嵌入式 linux 进程锁,嵌入式  Linux线程锁详解pthread_mutexattr_t

    在Posix Thread中定义有一套专门用于线程同步的mutex函数. 1. 创建和销毁 有两种方法创建互斥锁,静态方式和动态方式.POSIX定义了一个宏PTHREAD_MUTEX_INITIALI ...

  6. Java高并发编程:性能与线程竞争

    线程的最主要目的是提高程序的运行性能,线程可以使程序更加充分地发挥系统地可处理能力,从而提高系统的资源利用率.此外,线程还可以使程序在运行现有的任务的情况下即开始处理新的任务.但性能的提升会导致复杂性 ...

  7. [译] APT分析报告:04.Kraken - 新型无文件APT攻击利用Windows错误报告服务逃避检测

    这是作者新开的一个专栏,主要翻译国外知名的安全厂商APT报告文章,了解它们的安全技术,学习它们溯源APT组织的方法,希望对您有所帮助.前文分享了APT组织Fin7 / Carbanak的Tirion恶 ...

  8. educoder 使用线程锁(lock)实现线程同步_线程间的通信(一)

    这篇文章主要从4个角度来讲多线程间的通信: 使用wait/notify实现线程间的通信 生产者/消费者模式的实现 方法join的使用 ThreadLocal类的使用 等待/通知机制的实现: (1)wa ...

  9. 网络编程——线程竞争

    线程竞争 基本概念 互斥量(互斥锁) 信号量 死锁 条件变量 生产者与消费者模型 哲学家就餐问题 常考的面试题 基本概念   竞争与同步     同一个进程中的线程能够共享进程中的绝大多数资源,当它们 ...

最新文章

  1. spring整合mybatis(入门级简单教程4)--扫描mapper类
  2. SRE 是如何保障稳定性的
  3. Java 头像剪切及上传服务器JSP 笔记
  4. 高效大规模图像搜索开源实现
  5. mysql重装_连我mysql读你文件
  6. 利用openssl进行base64的编码与解码
  7. paip.提升效率---------文件搜索工具总结
  8. 免费下载“百度文库”文档方法,简单而强大~
  9. 【20211228】【信号处理】从 Matlab 仿真角度理解频谱泄露
  10. 终端应用变身文件 MD5/SHA1 校验工具
  11. Unity Timeline自定义轨道 DefaultPlayables源码剖析
  12. mounted和created的区别
  13. 基于SpingBoot2.0与activiti7.x构建的一套工作流程管理系统
  14. EST封面: 南方科技大学夏雨团队
  15. 苹果手机照片流使用方法(iphone我的照片流在哪)
  16. 第一章:数字移动通信基础知识
  17. 一篇文章彻底掌握 hive 中的 ORDER/SORT/CLUSTER/DISTRIBUTE BY 和 BUCKET 桶表
  18. 惠普HP LaserJet M439dn 打印机驱动
  19. 尚医通_第1章-项目简介
  20. 实验8HiveUDF

热门文章

  1. 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)
  2. 上位机获取单片机发来的数据并进行检验(完整版,附完整源码)
  3. rabbitmq可靠性投递_RabbitMQ 可靠投递
  4. catti二级笔译综合能力真题_CATTI 二级口笔译教材、真题和模拟试题汇总!
  5. PhpStudy升级数据库到mysql5.7方法
  6. java--面对对象之final关键字和static关键字
  7. 2017-03-01 Oracle10g的安装与配置使用
  8. Reveal v4(8796) 使用
  9. codeforces C. Inna and Huge Candy Matrix 解题报告
  10. jquery关于checkbox在ie下的一个bug