日常小记-线程&进程

概括性

  • 线程 == 多个执行实例
  • 多线程是一种编程模型,多线程并不一定需要多CPU多Core, 单CPU单Core系统依然可以运行多线程程序(虽然最大化利用多CPU多Core的处理能力是多线程程序设计的一个重要目标)
  • 【时间分片技术】 -- cpu 亲和性 & 绑核

1个人无法同时做多件事,单CPU/单Core也不可以,操作系统通过 时间分片技术  应对远多于CPU/Core数的多任务执行的挑战。也可以把有些任务只分配给某些人去完成,这对应到 CPU亲和性和绑核

相关查看命令

lscpu

lscpu -- 这个很不错! 
	- CPU(s): 系统中的逻辑CPU总数
	- Thread(s) per core: 每个物理核心支持的逻辑线程数,
        例如支持超线程技术的CPU通常为2 【什么是超线程哇???】

mpstat 

显示各个CPU的统计信息

mpstat -- 显示各个CPU的统计信息

mpstat
Linux 5.4.0-113-generic (hostname)    08/17/2021    _x86_64_    (4 CPU)

12:00:00 AM  CPU  %usr  %nice  %sys  %iowait  %irq  %soft  %steal  %guest  %gnice  %idle
12:10:01 AM  all   1.50  0.00  0.50  0.10     0.00  0.20   0.00    0.00    0.00    97.70
12:10:01 AM    0   1.00  0.00  0.40  0.20     0.00  0.10   0.00    0.00    0.00    98.30
12:10:01 AM    1   1.70  0.00  0.30  0.10     0.00  0.20   0.00    0.00    0.00    97.70
12:10:01 AM    2   1.80  0.00  0.60  0.10     0.00  0.10   0.00    0.00    0.00    97.40
12:10:01 AM    3   1.40  0.00  0.70  0.00     0.00  0.40   0.00    0.00    0.00    97.50
  • CPU:   代表CPU的编号。当显示all时,表示对所有CPU的汇总统计。
  • %usr:   用户态CPU时间的百分比。指在用户空间执行的任务消耗的处理器时间

高%usr值可能表示CPU密集型应用正在运行,比如计算密集的处理或数据压缩

  • %nice:   经过调整优先级的用户态CPU时间的百分比。指运行经过nice命令调整优先级的进程所消耗的处理器时间。 【不是很懂?】
  • %sys:   内核态CPU时间的百分比。指内核空间执行的任务消耗的处理器时间。

高%sys值可能表示有大量的系统调用或内核操作,比如大量的I/O操作】

  • %iowait:   I/O等待时间的百分比。表示CPU等待I/O操作完成而消耗的时间

【高%iowait值通常表示硬盘或网络I/O瓶颈】

  • %irq:   硬中断(硬件中断)处理时间的百分比。指硬件中断处理程序消耗的处理器时间
  • %soft:   软中断(软件中断)处理时间的百分比。指软中断处理程序(通常是设备驱动程序)的处理消耗的处理器时间
  • %steal:   虚拟化中"偷窃"时间的百分比。表示虚拟机管理程序在虚拟机上运行其他进程时消耗的时间。高%steal值通常出现在虚拟化环境中,表示虚拟机资源争用。
  • %guest:   客户机CPU时间的百分比。指在Hypervisor上运行的客户机操作系统消耗的时间
  • %gnice:   经调整优先级的客户机CPU时间的百分比。与%guest类似,但指经过nice调整优先级的客户机任务。
  • %idle:   空闲时间的百分比。当CPU没有任务执行且未处于等待状态时消耗的时间。高%idle值表示CPU大部分时间处于空闲状态
使用建议
  • %usr值:检查是否有CPU密集型应用正在运行,可能需要优化代码或分配更多CPU资源。
  • %sys值:可能存在大量系统调用或内核操作,检查是否有不必要的系统调用或I/O操作。
  • %iowait值:表示存在I/O瓶颈,考虑优化存储设备或分配更多带宽。
  • %steal值:常见于虚拟化环境,表示虚拟机管理程序抢占了CPU时间。考虑优化虚拟机配置。

vmstat

用于报告系统的虚拟内存、进程、CPU活动、磁盘I/O、分页和系统调用的统计信息。它可以帮助你快速了解系统的性能瓶颈和资源使用情况。 

vmstat 1 5 将每秒报告一次系统统计信息,共5次。

vmstat 1 5

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  83560  12374 3044920    0    0     1     1    4    6  1  0 99  0  0
 0  0      0  83560  12374 3044920    0    0     0     0  113  204  0  0 100 0  0
 0  0      0  83560  12374 3044920    0    0     0     0   79  150  0  0 100 0  0
  1. procs 板块

    • r: 运行队列中的进程数。表示有多少个进程正在等待CPU时间。如果这个值长期高于CPU核心数,可能表示CPU瓶颈。
    • b: 等待资源(如I/O操作)的进程数。表示有多少进程正处于不可中断的睡眠状态(通常等待磁盘I/O)。
  2. memory 板块

    • swpd: 已使用的交换空间(swap space)量,单位为KB。
    • free: 空闲内存量,单位为KB。
    • buff: 用作缓冲区的内存量,单位为KB。
    • cache: 用作文件系统缓存的内存量,单位为KB。
  3. swap 板块

    • si: 从交换空间读入内存的量(swap-in),单位为KB/s。
    • so: 从内存写入交换空间的量(swap-out),单位为KB/s。
  4. io 板块

    • bi: 块设备读操作量,单位为块/秒。
    • bo: 块设备写操作量,单位为块/秒。
  5. system 板块

    • in: 每秒钟的中断数,包括时钟中断。
    • cs: 每秒钟的上下文切换次数。高上下文切换数可能表示线程过多或锁争用严重。
  6. cpu 板块

    • us: 用户空间运行时间,比率值。表示非内核进程消耗的CPU时间百分比。
    • sy: 内核空间运行时间,比率值。表示内核进程和系统调用消耗的CPU时间百分比。
    • id: 空闲时间,比率值。表示CPU闲置的时间百分比。
    • wa: 等待I/O操作完成的时间,比率值。表示CPU等待I/O操作的时间百分比。
    • st: 被虚拟机抢占的时间,比率值。表示虚拟化环境中,由其他虚拟机抢占的时间百分比。
快速分析
  • 高 r 值:如果 r 值长期高于CPU核心数,系统可能存在CPU瓶颈。
  • 高 b 值:如果 b 值较高,表明有多个进程在等待I/O操作。
  • swap 板块 - 高 si 和 so 值表示系统正在频繁使用交换空间,可能需要增加物理内存。
  • io 板块 - 高 bi 和 bo 值表示系统正在进行大量的磁盘读写操作。
  • 高 us 值:表示用户进程正在大量使用CPU,可能需要优化这些进程。
  • 高 sy 值:表示系统进程或系统调用频繁,可能需要检查和优化内核参数。
  • 高 wa 值:表示系统在等待磁盘I/O操作,需要检查I/O性能问题。
  • 高 st 值:表示虚拟化环境下,本虚拟机被其他虚拟机抢占了CPU资源。

温故知新

线程池子相关配置 (核心线程数是指线程池在空闲情况下最小保留的线程数量(即使这些线程是空闲的)
✅ 配置原则:应根据系统的CPU核心数和应用程序的并发需求来设置。
✅  I/O密集型任务:核心线程数 可以设置为 CPU 核心数的2倍或更多
✅  CPU密集型任务:核心线程数 应设置为 CPU 核心数 + 1 或 CPU 核心数 

### Kettle Scheduler 配置方法及最佳实践 Kettle Scheduler 是一款基于 Spring、Spring MVC 和 BeetlSQL 的调度监控平台,用于管理和调度由 Kettle 客户端创建的作业 (Job) 和转换 (Transformation)[^1]。以下是关于 Kettle Scheduler 的配置方法和最佳实践: #### 1. 环境准备 在开始配置之前,确保以下环境已正确安装并运行: - Java JDK 8 或更高版本。 - Maven 构建工具(如果需要从源码编译)。 - 数据库支持:MySQL 或其他兼容数据库。 - Tomcat 或其他支持 Servlet 的应用服务器。 #### 2. 下载与部署 可以从项目地址下载 Kettle Scheduler 的代码或直接获取预构建的 WAR 文件[^1]。将 WAR 文件放置到 Tomcat 的 `webapps` 目录下,并确保 Tomcat 的配置文件中包含以下内容以支持热加载和调试功能[^2]: ```xml <Context path="/kettle-scheduler" docBase="kettle-scheduler" reloadable="true" debug="0" privileged="true"> </Context> ``` #### 3. 数据库配置 编辑 `application.properties` 文件,配置数据库连接信息。例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/kettle_scheduler?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 确保数据库已初始化,可以参考项目文档中的 SQL 脚本完成表结构的创建[^1]。 #### 4. Quartz 配置 Quartz 是 Kettle Scheduler 中的核心调度组件。可以通过修改 `quartz.properties` 文件调整调度器的行为。例如: ```properties org.quartz.threadPool.threadCount=10 org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate ``` #### 5. Kettle API 集成 Kettle Scheduler 使用 Kettle 提供的 API 来执行 Job 和 Transformation。确保项目的依赖中包含 Kettle 的相关 JAR 包。例如,在 `pom.xml` 中添加以下依赖项: ```xml <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-engine</artifactId> <version>9.1.0.0-324</version> </dependency> ``` #### 6. 启动与访问 启动 Tomcat 并通过浏览器访问 Kettle Scheduler 的管理界面。默认路径为 `http://localhost:8080/kettle-scheduler`。登录后即可进行作业和转换的调度与监控。 #### 7. 最佳实践 - **性能优化**:根据实际需求调整 Quartz 的线程池大小,避免因线程不足导致任务积压[^1]。 - **日志管理**:启用详细的日志记录以便排查问题,同时定期清理过期日志以节省存储空间。 - **安全性**:配置 HTTPS 访问以保护敏感数据传输,并使用强密码策略加强用户账户的安全性。 - **备份机制**:定期备份数据库和 Kettle 文件,防止数据丢失。 ```python # 示例:通过 Python 调用 Kettle API 执行一个简单的转换 from subprocess import Popen, PIPE command = [ "pan.bat", "-file=/path/to/your/transformation.ktr", "-level=Basic" ] process = Popen(command, stdout=PIPE, stderr=PIPE) stdout, stderr = process.communicate() if process.returncode == 0: print("Transformation executed successfully.") else: print(f"Error occurred: {stderr.decode('utf-8')}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值