一、中断的解释
网络
中断(Interrupt)是指 处理器接收到来自硬件或软件的信号,提示发生了某个事件,应该被注意,这种情况就称为中断。
软中断 (form 《UNIX 操作系统设计》)
内核在收到软中断信号的进程上下文中处理软中断信号,因此进程必须运行以便处理信号。
处理软中断信号的方式:
- 进程忽略软中断信号;
- 进程收到软中断信号后退出;
- 进程收到信号后执行一个特殊的(用户)函数;
二、Java 的中断
Java API 中线程相关的方法主要有三个:
在近两年高并发系统 DevOps 的过程中,
遇到了很多底层的问你题,eg: 网络、硬件、虚拟机等,
有些现象虽然知其然,但是不知其所以然,书到用时方恨少!
抱着深入学习的心态这两年看了一些相关书籍:
《计算机网络:自顶向下方法》
《操作系统精髓与设计原理》
《Java性能优化权威指南》
《Redis运维与开发》
《性能之巅》
收获甚大 所以想继续深入学习
误打误撞,看到了之前在 GitHub 关注的一个『自学计算机科学』仓库,很赞同下面这个观点
软件工程师分为两种:
这两种人都自称软件工程师,都能在职业生涯早期挣到差不多的工资。
然而,随着时间流逝,第一种工程师不断成长,所做的事情将会越来越有意义且更为高薪,
不论是有价值的商业工作、突破性的开源项目、技术上的领导力或者高质量的个人贡献。
本文灵感来自《人人都是产品经理 2.0》
位置:7.4.2 如何做一个让 Ta 们讨厌的人
作为一个研发,工作过程中如果能及时发现如下场景,
及时给对方负反馈,否则受伤的是整个团队。
看了这本书之后,感觉对产品有新的认知,
知道他们在做什么,怎么做,后续可以更好的与他们沟通。
而且里面的内容对于研发来讲也是适用的。
技术问”为什么要做”时:
1、时支支吾吾
2、这是老板(XXX)要的,假装自己是个传话筒
3、我接的是二手需求,什么都不知道
随说:其实正确的做法是追溯这个需求的初衷,有利于评估 ROI (投入产出比),以及排优先级,以及增进对业务的理解。
由于某种原因,需要手工处理错误日志提取某些信息。
下载下来的日志文件是压缩包
1 | system_error.log.2020-11-01.20201105200433.zip |
1 | $ unzip -v system_error.log.2020-11-01.20201105200830.zip |
压缩包文件名不一样,但是压缩包中的文件有一样的名字。
例如:system_error.log.2020-11-01
尝试使用如下方式,提示有重复,需要挨个选择如何处理,极度不便。
于是想使用 shell 来解决( 之前没写过 shell )
单位 | 英文全称 | 中文全称 | 转换 |
---|---|---|---|
b | bit | 位 | - |
B | Byte | 字节 | 1B=8b |
KB | Kilo Byte | 千字节 | 1KB=1024B |
MB | Mega Byte | 兆字节 | 1MB=1024KB |
GB | Giga Byte | 千兆 | 1GB=1024MB |
TB | Trillion Byte | 万亿字节 | 1TB=1024GB |
PB | Peta Byte | 千万亿字节 | 1PB=1024TB |
EB | Exa Byte | 百亿亿字节 | 1EB=1024PB |
ZB | Zetta Byte | 十万亿亿字节 | 1ZB=1024EB |
YB | Yotta Byte | 一亿亿亿字节 | 1YB=1024ZB |
BB | Bronto Byte | 一千亿亿亿字节 | 1BB=1024YB |
NB | Nona Byte | 1NB=1024BB | |
DB | Dogga Byte | 1DB=1024NB | |
CB | Corydon Byte | 1CB=1024DB | |
进制除了 Byte 与 bit 之间是 8,其它的都是 1024,但是目前很多时候习惯用 1000,比如 1T ≈ 1000G; |
运营商(ISP)带宽宣传常见的有:50M、100M、500M、1000M…
注意:这是传输速率,而不是下载速度。
最近做压力测试,不同的系统的机器监控数据差异明显
A 系统:CPU 高 load 低
B 系统:CPU 低 load 高
那么是什么导致 A B 系统出现这种情况?
CPU 高了系统肯定跑不动了,那么 load 多高代表系统跑不动呢?
Linux 系统下代表的是 system load averages。
Linux load averages track not just runnable tasks, but also tasks in the uninterruptible sleep state.
Linux 平均负载不仅跟踪可运行的任务,还跟踪处于不可中断睡眠状态的任务。
On Linux, load averages are (or try to be) “system load averages”, for the system as a whole, measuring the number of threads that are working and waiting to work (CPU, disk, uninterruptible locks). Put differently, it measures the number of threads that aren’t completely idle. Advantage: includes demand for different resources.
在 Linux 上,负载平均值是(或试图是)“系统负载平均值” ,对于整个系统来说,测量正在工作和等待工作的线程数(CPU、磁盘、不可中断锁)。换句话说,它测量的是没有完全空闲的线程数量。优势: 包括对不同资源的需求。
In 1993, a Linux engineer found a nonintuitive case with load averages, and with a three-line patch changed them forever from “CPU load averages” to what one might call “system load averages.” His change included tasks in the uninterruptible state, so that load averages reflected demand for disk resources and not just CPUs.
1993年,一位 Linux 工程师发现了一个与平均负载不直观的案例,一个三行补丁永远地将它们从“ CPU 负载平均值”改变为人们可能称之为“系统负载平均值”他的更改包括处于不可中断状态的任务,因此平均负载反映了对磁盘资源的需求,而不仅仅是 cpu。
目前测试机器为 4C8G
两台机器完全处理一样的工作
大部分时间对象朝生夕死,很少进入老年代
CMS 指定了新生代最大 1536M,略微有点浪费
于是设置 G1 自动调节各个区域大小,看看能否有所改善
也因为最近重温了两本 JVM 相关的书籍,找机会进行实践看看
1 | -Xms4096M |
当初这个文档应该是在『科技爱好者周刊』上还是哪里发现的
看这个文档本来的目的是每天坚持阅读英文文档
技术文档一般都比较简洁易懂,英语是一个长期的过程,还得继续坚持阅读~
看的过程中发现,结合一定的场景,和示例
和官方文档相比,没有那么枯燥,也更好理解
甚至有一些之前未曾关注的用法让我感到惊艳
所以推荐一下
很多时候我们调用接口并不是需要接口返回的所有信息;
就像查询数据库很少使用 select * from table; 一样;
为了使现有的存储结构以及代码逻辑改动最少
想办法在最外层的接口对返回的对象进行精简
目的使为了提高接口性能:减少 RPC 传输时间、节省网络带宽、节省序列化开销
前面两种比较呆板,属于定制化开发;
Spring BeanWrapper 方案处理非集合对象比较完美,输出对象小不少;
基本数据类型有默认值,无法去除,不过这种对大小影响不大;
完整代码:github.com
1 | public static void main(String[] args) { |