一.Linux中常用的监控CPU整体性能的工具有:
§ mpstat: mpstat 不但能查看所有CPU的平均信息,还能查看指定CPU的信息。
mpstat [-P {|ALL}] [internal [count]] -P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
§ vmstat:只能查看所有CPU的平均信息;查看cpu队列信息;
vmstat和sar类似也可指定采样周期和采样数量
§ iostat: 只能查看所有CPU的平均信息,快速定位系统是否产生大量I/O操作
§ sar: 与mpstat 一样,不但能查看CPU的平均信息,还能查看指定CPU的信息。
sar [-u,-r,-b] [
§ top:显示的信息同ps接近,但是top可以了解到CPU消耗,可以根据用户指定的时间来更新显示。
pidstat linux性能检测工具
在Debian/Ubuntu系统中可以使用下面的命令来安装
# apt-get install sysstat
CentOS/Fedora/RHEL版本的linux中则使用下面的命令:
# yum install sysstat
二.RPC和Http的区别:
目前有很多Java的RPC框架,有基于Json的,有基于XML,也有基于二进制对象的。
论复杂度,RPC框架肯定是高于简单的HTTP接口的。但毋庸置疑,HTTP接口由于受限于HTTP协议,需要带HTTP请求头,导致传输起来效率或者说安全性不如RPC。
现在问题是,遇到怎样的瓶颈了才需要或者说更适合用RPC(比如像阿里这么大的请求并发量,简单的HTTP肯定达不到预期),但问题是大家所在的公司,要有像阿里这么大的量是比较少的,甚至说1/1000的量可能都没有,那我们还需要使用RPC吗?
技术应该不是为了使用新技术而去使用,而应该是旧技术存在某些瓶颈,存在难以支撑或者扩展性越老越差等问题暴露出来之后,用新技术来进行解决。
http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议进行传输。但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。第三个来说就是安全性。最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑
三.NIO的理解
3.1NIO和BIO的区别和各自适用的场景
区别:3.2给我们带来了些什么
NIO一个重要的特点是:socket主要的读、写、注册和接收函数,在等待就绪阶段都是同步非阻塞的,真正的I/O操作是同步阻塞的(消耗CPU但性能非常高)。
解释的比较清楚的文章:
http://tech.meituan.com/nio.html?utm_source=tuicool&utm_medium=referral
四常用的集合
ArrayList的内部实现是基于基础的对象数组的,因此,它使用get方法访问列表中的任意一个元素时(random-access),它的速度要比LinkedList快
LinkedList基于链表的数据结构,没有同步办法。若是多个线程同时接见一个List,则必须本身实现接见同步。一种解决办法是在创建List机会关一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
Vector是同步的。由Vector创建的Iterator,固然和ArrayList创建的Iterator是同一接口,然则,因为Vector是同步的,当一个Iterator被创建并且正在被应用,另一个线程改变了Vector的状况(例如,添加或删除了一些元素),这时调用Iterator的办法时将抛出ConcurrentModificationException,是以必须捕获该异常。
总结特点如下:
类型 | 内部结构 | 顺序遍历速度 | 随机遍历速度 | 追加代价 | 插入代价 | 删除代价 | 占用内存 |
ArrayList | 数组 | 高 | 高 | 中 | 高 | 高 | 低 |
LinkedList | 双向链表 | 高 | 低 | 低 | 低 | 低 | 中 |
五锁
只在REPEATABLE READ或以上的隔离级别下的特定操作才会取得gap lock或nextkey lock。