dtrace

dtrace: doesn't catch any write sys call

狂风中的少年 提交于 2021-01-28 04:12:26
问题 I'm new to dtrace and trying to write some a basic dtrace scripting. I found a example to catch read(2) and write(2) syscall on seperate terminal as following, syscall::read:entry, syscall::write:entry /pid==4217/ { } The specified pid number is from the other terminal's pid id. When I saw the example, it supposed to show some read and write syscall if I run this script with dtrace. But I only observed read syscall but not write syscall. So if I understand correctly, on the terminal I observe

再谈synchronized

独自空忆成欢 提交于 2021-01-05 10:23:21
1.synchronized如何实现同步的? 2.synchronized对象锁保存在哪里? 3.如何加锁和释放锁,1.6做了哪些优化? 4.如何将线程挂起等待和唤醒? 对象内置锁 我们 之前 了解过synchronized同步普通方法和静态方法,以及同步代码块,其中的区别在于synchronized具体锁的是那个对象,是具体的实例还是类对象,即class 我们通过反编译:javap -verbose SynchronizedTest.class >sync.txt。可以看出使用synchronized之后的一些细微的变化,方法上的同步关键字,class文件反编译后会发现flags中有ACC_SYNCHRONIZED标识。 1.方法 级的 同步是隐式的:同步方法的常量池中会有一个ACC_SYNCHRONIZED标志。当某个线程要访问某个方法的时候,会检查是否有ACC_SYNCHRONIZED,如果有设置,则需要先获得对象的内置锁,然后开始执行方法,方法执行之后再释放锁。 2.同步代码块:依赖monitorenter和monitorexit相关标识,通过JVM内置锁对象来实现加锁和释放锁。 对象头信息简介:首先每一个对象在堆内存中,实例对象会有对象头信息,对象实体信息,还有填充信息。其中头信息中包括锁状态,GC年纪,Hash值和监控monitor对象的引用等信息

服务器(Linux)缓冲跟踪类型的系统调用分析

走远了吗. 提交于 2020-12-26 16:57:11
本文主要讲解缓冲跟踪型的系统调用分析,主要目的是为了探究和分析CPU在内核或与用户空间结合部分的系统调用细节,从中可以发现一些问题,用于性能或者其他问题研究。 首先是两个概念: 断点跟踪类型,其是在进行取样时,中断目标程序的执行来获取数据的,比如strace命令。 缓冲跟踪类型,这就和断点跟踪不一样了,它是可以将获取到的检测数据缓存在内核里,而目标程序可以不中断执行。dtrace命令就属于缓冲跟踪。 系统调用有很多,Linux操作系统可能就有几百个(具体没有统计)。 案例1: 我们以进程间通信相关的一个系统调用kill为例来检测系统中的具体情况。命令如下: sudo dtrace -qn 'syscall::kill:entry { printf("%Y: %s (PID %d) sent a SIG %d to PID %d\n",walltimestamp,execname,pid,arg1,arg0);}' 执行结果如下,其中PID=1位init进程,它是所有其他用户进程的祖先进程,并且会监视其他进程。 我们来分析下第一行:init 进程发送了一个SIG信号 15 到PID -13929,其中SIG 15 是指SIGTERM 信号 案例2: 我们可以利用dtrace命令对Postgres数据库进程进行系统调用分析。 命令: sudo dtrace -n 'syscall::

PHP系列之钩子

て烟熏妆下的殇ゞ 提交于 2020-10-02 12:53:48
PHP 提供的钩子 PHP 和 Zend Engine 为扩展提供了许多不同的钩子,这些扩展允许扩展开发人员以 PHP userland 无法提供的方式控制 PHP 运行时。 本章将展示各种钩子和从扩展钩子到它们的常见用例。 钩子到 PHP 功能的一般模式是 PHP 核心提供的扩展覆盖函数指针。然后扩展函数通常执行自己的工作并调用原始 PHP 核心函数。使用此模式,不同的扩展可以覆盖同一个钩子而不会导致冲突。 挂钩到函数的执行 userland和内部函数的执行由Zend引擎中的两个函数处理,您可以用自己的实现替换这两个函数。覆盖此钩子的扩展的主要用例是通用函数级评测、调试和面向方面的编程。 钩子在 Zend/zend_execute.h 中定义: ZEND_API extern void (*zend_execute_ex)(zend_execute_data *execute_data);ZEND_API extern void (*zend_execute_internal)(zend_execute_data *execute_data, zval *return_value); 如果要覆盖这些函数指针,则必须在 Minit 中执行此操作,因为 Zend Engine 中的其他决策是根据指针是否被覆盖这一事实提前做出的。 覆盖的通常模式是这样的: static void (

redhat7.6Linux安装Oracle19C完整版教程

坚强是说给别人听的谎言 提交于 2020-05-06 08:08:55
首先安装配置虚拟机,见博客 https://www.cnblogs.com/xuzhaoyang/p/11264563.html 然后配置IP地址,见博客 https://www.cnblogs.com/xuzhaoyang/p/11264573.html 配置本地的yum源,见博客 https://www.cnblogs.com/xuzhaoyang/p/11264584.html 接下来,如果选在在外部Xshell链接Linux操作,可以参见博客 https://www.cnblogs.com/xuzhaoyang/p/11264587.html ,当然也可以在虚拟机里直接使用 (本人推荐使用Xshell还有Xftp链接,这样配置更加快捷方便) 然后在进行验证在Linux下的图形化显示xclock,见博客 https://www.cnblogs.com/xuzhaoyang/p/11264609.html Oracle19C的安装包下载: https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 需要先行自己注册一个账号。 下载完之后的压缩包 接下来,咱们开始进入正题,哈哈 1创建组和用户 /usr/sbin/groupadd -g 54321 oinstall

Linux资源分析工具杂谈(长文慎入)

佐手、 提交于 2020-04-26 04:36:08
Linux资源分析工具杂谈 开篇之前请大家先思考一个问题: 磁盘的平均I/O响应时间是1 ms,这个指标是好,还是差? 众所周知,计算机科学是客观的,也就是说对于一个给定的问题,我们总是能给出明确的答案,比如我们网上购物买了两件100元的衣服,我们应该付款200元,但是系统给我们计算出的金额确是300元,我们可以明确的告诉商家,结果算错了。与此不同,性能却常常是主观的,甚至对性能问题的判断都可能是不准确的,比如我们刚刚提到的1ms,一定有人认为是好的,也有人认为是差的,要客观的回答这个问题,可能是一项系统性的工作,必须需要首先定义基准(基准定义本身相对复杂,内容可以写一本书,在此不做深入讨论),有了基准指标,通过比较才能得出合理的结论。表1列出了一些数值,期望可以使大家对计算机科学的一些延时有一个粗略的概念,表中以一个3.3GHZ主频的CPU一次访问寄存器为基准进行说明,比如如果我们认为计算机世界中一次寄存器访问的时间0.3纳秒是现实生活中的1秒,那么访问一次内存的相对时间就是6分钟,表1中参考数据源自互联网。 表1. 计算机科学中的延时 软件发展到今天可谓日新月异,短短的几十年中极大的提高了人类的生产力。伴随着软件功能的发展,软件的复杂度也在几何级的增长,从经济性的角度来讲,人们总是希望投入更少的硬件资源,更少的电力,更少的时间来完成更多的生产任务,人们期望自己的每一度电

How to activate sh DTrace Provider?

此生再无相见时 提交于 2020-01-06 21:47:10
问题 I've found out about patches (and updates) for an x86 sh binary in 2007 to support sh DTrace provider. However I can't find any probes on OS X. I'm checking by: $ sudo dtrace -l | grep command-entry See: /bin/sh DTrace Provider at Oracle site (same article on blog) Maybe because my sh is the same as GNU bash? $ /bin/sh --version GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15) Where these probes were implemented, how I can find them or how I can activate them? Were there only

Convert connect address with address familiy AF_SYSTEM to human readable string

雨燕双飞 提交于 2019-12-25 15:52:30
问题 Background I'm writing some dtrace program which tracks application socket file descriptors. Aim is to provide logs which help me spot leak of file descriptors in some very complex OS X application. Here is my other question with very helpful answer. Problem I want that my program is logging address to which file descriptor has been connected to. In examples there is a code which partial do what I need: soconnect_mac.d , here is link to github. soconnect_mac.d works great when applied on

Is it possible to conceal a OS X app from DTrace?

∥☆過路亽.° 提交于 2019-12-25 00:58:59
问题 I am developing an OS X application that I would like to conceal from inspection by DTrace. I'm aware of the P_LNOATTACH flag, but everything I've read tells me that there are ways around it. Is it possible? 回答1: Yes, it's possible. Try running DTrace against iTunes; it doesn't work. You have to call the ptrace function with PT_DENY_ATTACH. http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/ptrace.2.html However, there are ways around it with various kext's.

Custom instruments how to output aggregations like dtrace script

♀尐吖头ヾ 提交于 2019-12-24 09:58:37
问题 I am trying to convert below dtrace script to custom instrument. How should we configure the END probe to show the output the aggregated output. pid$target:myApp:main:entry/((pid == $target))/{ starttime = timestamp; } objc$target:myApp*::entry/((pid == $target))/{ starttimeformethod[probemod,probefunc] = timestamp; methodhasenteredatleastonce[probemod,probefunc] = 1; } objc$target:myApp*::return/((( /*XRAYPREDICATELHS*/(methodhasenteredatleastonce[probemod,probefunc] == 1/*XRAYPREDICATERHS*/