linux下strace命令跟踪java进程

2023-05-16

     strace命令的使用,是看了马士兵老师讲的netty底层原理课程,里面举了一个例子,使用java程序编写一个简单的socket服务器,然后等待客户端连接。

    本身,这个程序很简单,但是通过strace命令跟踪,可以看到,jvm底层调用了linux系统内核的socket,出现了一系列bind,listen,accept等等命令。

    strace这个命令并不是linux自带的,需要安装,centos系列可以直接通过yum安装。

    下面直接看示例:

    SocketTest.java

import java.io.*;
import java.net.*;

public class SocketTest{
  public static void main(String[] args) throws Exception{
    ServerSocket server = new ServerSocket(8090);
    System.out.println("step1: new ServerSocket(8090)");
    while(true){
      Socket client = server.accept();
      System.out.println("step2:client\t"+client.getPort());
      new Thread(new Runnable(){
        Socket ss;
        public Runnable setSocket(Socket s){
          ss = s;
          return this;
        }
        public void run(){
          try{
            InputStream in = ss.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            while(true){
               System.out.println(reader.readLine());
            }
          }catch(Exception e){
            e.printStackTrace();
          }
        }
      }.setSocket(client)).start();
    }
    
  }
}

    接着,进行如下几步:

  1. 编译java文件
  2. 开启跟踪
  3. 查看跟踪日志
  4. 模拟客户端连接继续看日志 

    这个时候,目录下回生成很多out开头带进程ID的文件,这都是跟踪文件。

    关键字bind,listen出现了,因为这时候没有客户端连接,所以进程挂起,等待客户端连接。

    现在模拟客户端连接,当我们输入连接命令,其他两个终端窗口显示日志发生了变更。

    切回第一个终端窗口,就是开启跟踪命令的窗口,发现打印了终端连接端口信息47642。

    切回到查看跟踪日志的终端窗口,日志信息发生了很大变化,需要滑动到最前面,我们看到了accept,并且 显示终端连接信息。

     这个示例,可以很清楚的看到,java的socket连接程序,运行在jvm上,底层的jvm去调用系统内核命令,这些命令bind,listen,accept都是linux下socket操作,我们如果写过c程序的套接字程序,会发现,就是这些命令的拼装与组合。java与c/c++有着很紧密的联系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux下strace命令跟踪java进程 的相关文章

  • 2020年csdn盘点

    十年前就注册了csdn账号 xff0c 之后一直没有写过博客 xff0c 都是看别人的博客 xff0c 等到2015年左右发表了第一篇自己的博客 xff0c 直到2016年底觉着做技术的就需要记录自己的博客 xff0c 不仅是自己学习的过程
  • chrome浏览器安装react-devtools

    react devtools是react开发时的一个浏览器插件 xff0c 对于各大主流高级浏览器都有扩展程序可以安装 xff0c 官方的地址默认是https github com facebook react devtools xff0c
  • react+typescript项目构建

    react项目构建可以很简单 xff0c 但是如果是结合typescript xff0c 其实也不是很麻烦 xff0c 官网也有很明确的说明 有两种办法 xff1a 1 直接构建带有typescript的react项目 xff0c 我们需要
  • react项目启动报错:Uncaught TypeError: Cannot read property ‘forEach‘ of undefined

    如题 xff0c react项目启动报错 xff0c 具体信息 xff0c 如下所示 xff1a 这个问题是因为浏览器安装了react devtools扩展程序导致的 xff0c 很多人的解决办法就是直接禁用react devtools x
  • react组件之间传值

    看过一些文章介绍react组件之间传值 xff0c 无外乎以下几种情况 xff1a 父子组件之间相互传值 xff0c 兄弟节点之间传值 最常见的就是父子组件 xff0c 做法也很简单 xff1a 就是在父组件中直接通过props属性的方式将
  • 利用mocha进行以太坊智能合约编译部署测试

    使用智能合约编程语言solidity编写的智能合约 xff0c 除了可以直接通过以太坊的工具链truffle ganache cli进行测试之外 xff0c 还可以结合mocha进行单元测试 mocha单元测试本质上 xff0c 还是需要对
  • electron报错:Uncaught Error: A dynamic link library (DLL) initialization routine failed

    如题所示 xff0c 我们在进行node 43 electron开发桌面应用的时候 xff0c 经常会遇到这样的问题 xff1a 根据提示是因为ref依赖模块没有合适的编译版本 xff0c 但是我们进行npm install的时候没有报错啊
  • C语言 利用冒泡排序法对10个字符由小到大排序

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • truffle+ganache-cli构建简单以太坊智能合约并编译部署

    以前接触过以太坊工具链来做区块链练手项目 xff0c 后来荒废了 xff0c 如今再次捡起来 xff0c 算是回忆和加深 之前可能因为网络的原因 xff0c 在truffle各种初始化编译合成智能合约都遇到了好多问题 xff0c 如今再次尝
  • docker-compose搭建mongo+elasticsearch+graylog运行环境

    graylog是一个小型的开源日志收集 分析 展示框架 主要graylog运行需要mongo elasticsearch xff0c 所以他们就组成了一个小的整体 一般在虚拟机上搭建 xff0c 可以分开安装部署 xff0c 但是既然是一个
  • word文档中插入图片显示不全解决办法

    在windows下写word文档 xff0c 正常情况下 xff0c 我们应该不会遇到插入图片显示不全的问题 xff0c 好像是如果在已有的文档中插入图片 xff0c 比如文档中间插入 xff0c 图片没办法自动扩展空间 xff0c 这就导
  • quasar构建linux版本electron项目以及如何让electron程序在linux下运行

    quasar构建 xff0c 默认命令是 xff1a quasar build m electron 如果要支持linux xff0c 通常是直接加参数 target linux或者简写 T linux quasar build m ele
  • docker容器改变时区

    默认情况下的docker容器启动之后 xff0c 系统时间是UTC时间 xff0c 这导致和我们的北京时间相差8小时 xff0c 会引出很多问题 有一些容器是和项目一起构建的 xff0c 我们可以在构建的时候 xff0c 将系统时区修改为A
  • elasticsearch加入中文分词器elasticsearch-analysis-ik插件

    前言 elasticsearch作为一个分布式弹性存储与检索系统 xff0c 默认是不支持中文分词的 xff0c 但是呢 xff0c 这个工作有人做 xff0c 估计都是中国人做的吧 什么是中文分词呢 xff0c 简单来说 xff0c 就是
  • c语言自定义tcp协议实现socket通信

    一般的tcp协议示例 xff0c 大家给出的demo都是类似一个helloworld的示例 xff0c 简单罗列了socket建立 xff0c 创建连接 xff0c 发送数据 xff0c 关闭连接的过程 xff0c 实际上tcp通信确实也就
  • c语言自定义tcp协议实现socket通信(windows版本)

    前面一篇博客介绍了mac linux下通过C语言自定义协议实现socket通信的示例 xff0c 因为大部分api与windows还有很多区别 xff0c 这里就特意把windows下的tcp通信实例给介绍一下 无论是linux xff0c
  • macos升级体验

    周末在家里把macos从10 11 6版本升到了10 14 6版本 xff0c 其中的过程基本大同小异 后面想继续升级 xff0c 发现遇到了问题 网上有的说需要一步一步来升级 xff0c 如果是10 11 xff0c 需要先升级到10 1
  • xcode开发c语言开启多target

    xcode开发c语言 xff0c 在选择project template时选择command line tool xff0c 后面填入product name xff0c 最后选择存储位置就可以了 但是一般而言c语言项目只有一个main函数
  • vaex 将csv转换为hdf5

    I have a massive CSV file which I can not fit all into memory at one time How do I convert it to HDF5 We are working to
  • ubuntu1804源码编译jdk8

    这里纯粹自己弄着玩 xff0c 因为以前没有成功过 xff0c 这里记录一下 xff0c 就是让遇到问题的人可以规避问题 xff0c 快速编译自己的jdk 相信很多学java的人都看过或者了解过一本书 深入理解java虚拟机 xff0c 里

随机推荐

  • vmware安装minix并开启x11

    最近突然想弄一下minix这个老牌的系统 vmware安装minix3虚拟机 xff0c 其实很简单的 xff1a 1 新建虚拟机 xff0c 选择经典 2 选择客户机操作系统 xff1a 其他 xff0c 版本 xff1a 其他 64位
  • minix3通过pkgin_cd安装二进制包

    在安装完minix3虚拟机之后 xff0c 如果要进行其他工具的安装 xff0c 默认需要借助pkgin xff0c 这个需要先更新 pkgin up xff0c 然后安装各种可以被下载的包 本人试了几次之后 xff0c 发现pkgin i
  • clang: error: unable to execute command: Executable “ld“ doesn‘t exist!

    如题所示 xff0c 我在minix3中直接安装了clang xff0c 然后使用如下命令编译c程序报错 clang hello c o hello clang error unable to execute command Executa
  • c语言结构体内存对齐问题

    c语言中结构体使用是非常广泛的 xff0c 但是结构体有一个问题 xff0c 就是如果开头的字段属性是字符类型 char xff0c 紧跟着的是其他类型 xff0c 比如整型 长整型 双精度 浮点型 xff0c 这时候结构体的大小会发生改变
  • java通过jni调用native method

    jdk中规定了native method xff0c 每一个native method背后对应有一个动态链接库来支持它 xff0c 在windows系统上 xff0c 就是dll后缀的文件 native method是需要通过c c 43
  • minix3下安装libevent

    libevent是一个c语言编写的事件框架 xff0c 支持异步IO 定时器 信号事件 它支持跨平台 xff0c 大部分都是在linux下安装并使用 xff0c 今天介绍在unix系统minix3上的安装 minix3上编译环境是clang
  • win10启动命令行之前执行命令

    这个问题的引出 xff0c 是我在win10上设置cmd命令行字体的问题 xff0c 我之前在win7上设置过cmd终端命令行字体 xff0c 通过更改注册表 xff0c 然后设置想要的字体 xff0c 就可以达到效果 xff0c 可是在w
  • Dynamic Linking Error: Win32 Error 126问题排查

    如题所示 xff0c 这个问题是我在electron项目中使用ffi调用动态链接库出现的 xff0c 本机运行都好好的 xff0c 打包构建然后放到别的机器上运行出错 这个问题一度也让我很迷茫 xff0c 如果是路径导致的这个问题 xff0
  • npm安装windows-build-tools一直卡在successfully installed python2.7不动

    以前安装过windows build tools xff0c 很顺利的 xff0c 没想到最近在别的机器上安装 xff0c 出现了卡住不动的情况 xff0c 就是如题的问题 其实这个问题出现在执行vs BuildTools exe安装问题上
  • C++学习笔记一 —— 两个类文件互相引用的处理情况

    先记录一些零碎的知识点 xff1a 1 一个类可以被声明多次 xff0c 但只能定义一次 xff0c 也就是可以 class B class B class B class B 这样子 2 一个类 C 的声明中 xff08 函数只声明还没定
  • koa设置静态资源以加载html页面

    koa是express之后又一个node框架 xff0c 它可以很方便的构建http服务 一般 xff0c 我们看到的koa是配合koa router路由来做服务端请求控制 xff0c 大部分是要么返回string xff0c 要么返回js
  • springboot实现jsonp

    jsonp是ajax跨域解决方案的一种办法 xff0c 就是借助标签 lt script gt lt script gt 可以实现不同域之间数据请求的一种方式 xff0c 类似iframe xff0c 不受跨域限制 xff0c 它请求返回之
  • koa利用koa-views通过路由返回html页面

    前面一篇博客介绍了koa借助koa static依赖可以实现以静态资源的形式加载html xff0c 但是没有路由功能 xff0c 一般而言 xff0c 前后端分离之后 xff0c 路由控制是由前端控制 xff0c 也有一些不分离的项目 x
  • koa解决跨域问题

    koa作为一个node http服务框架 xff0c 它解决跨域问题 xff0c 跟其他框架跨域类似 xff0c 可以通过自定义中间件的方式对请求做处理 xff0c 也可以通过使用封装好的 64 koa cors依赖 xff0c 两行代码搞
  • nginx解决跨域问题

    跨域问题 xff0c 是因为浏览器同源策略 xff0c 页面从一个域发起另一个域的异步ajax请求时 xff0c 不被认可导致 如果我们的请求在一个域里面 xff0c 那么浏览器就会认为是安全的 xff0c 就不会造成跨域 xff0c 而n
  • cookie属性max-age与expires同时存在时谁会生效

    我以前面试前端的时候 xff0c 面试官问过这个问题 xff0c 这是一个比较刁钻的问题 xff0c 好像很难选择 max age表示最大生命周期 xff0c expires表示过期时间 xff0c cookie使用其中任何一个 xff0c
  • 带cookie的异步ajax跨域请求问题

    ajax跨域携带cookie需要增加一个参数 xff0c xhrFields withCredentials true xff0c 而且这个时候的cookie是种在服务端接口域里面的 xff0c 而不是页面所在的域 服务端解决跨域问题的时候
  • sqlmap工具与sql注入漏洞测试

    sql注入是我们在开发与面试中经常听到的一个词语 xff0c 它利用sql语句本身执行的特点 xff0c 加入一些特定的语句拼接 xff0c 骗过sql编译 xff0c 最后执行 xff0c 结果就出现意想不到的情况 我在之前的工作中并不了
  • Javascript保留两位小数

    javascript语言 xff0c 因为是弱类型语言 xff0c 没有java那么多类型 xff0c 所以在处理浮点数保留两位小数上 xff0c 没有那么多格式化办法 javascript语言中字符串和整数 xff0c 浮点数是有区别的
  • linux下strace命令跟踪java进程

    strace命令的使用 xff0c 是看了马士兵老师讲的netty底层原理课程 xff0c 里面举了一个例子 xff0c 使用java程序编写一个简单的socket服务器 xff0c 然后等待客户端连接 本身 xff0c 这个程序很简单 x