1. 性能优化是什么?
1.1 性能优化就是发挥机器本来的性能
2. 性能的几个唯度
2.1. CPU
命令 vmstat(- vmstat 虚拟内存性能监控、CPU监控(进程上下文切换、CPU利用率) )
http://www.man7.org/linux/man-pages/man8/vmstat.8.html
首先检查 cpu,cpu 使用率要提升而不是降低
CPU 空闲并不一定是没事做,也有可能是锁或者外部资源瓶颈。
命令 Top(- top 系统负载、CPU使用率、各个进程的详细报告(CPU使用率、内存使用情况))
http://man7.org/linux/man-pages/man1/top.1.html
2.1.1CPU 负载高定位步骤
1.top 找到 CPU 高的进程 (原理:方法是由线程执行的,线程是在进程下的,找 到进程下 cpu 最高的线程就能定位到方法)
2.拿到线程号之后用jvm命令(jstack+线程号)捕捉CPU使用率高的线程的dump(需要注意的是top中必须是线程号非进程号,因为jstack只能捕捉线程,在top命令下可shift+H切换线程模型)
3.将线程号(PID)转为16进制
4.在vi编辑器在打开存有线程信息的文本(a.txt),输入转换后的PID即nid地位到异常信息
2.2. memory
命令 free
http://www.man7.org/linux/man-pages/man1/free.1.html
两者都是RAM中的数据。简单来说, buffer是即将要被写入磁盘的, cache是被从磁盘中读出来的。这二者是为了提高IO性能的,并由OS售理,并非应用自己分配的内存,而是OS自己根据需要对空闲内存进行的额外利用。因为这部分只是綬存,降低IO,提升性能,只要应用程序有需要,OS可以直接将 buffer写入磁盘,将 caches删掉来得到空闲内存给应用程序使用。
buffer是用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。缓冲( buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成 cache以方便下次被访问,这样可提供系统性能。缓存( cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
因此:
-/+ buffers/ cacher的含义即:使用内存是实际当前使用内存减去 buffers/ cache之和;空闲内存是实际空闲内存加上 buffers/ cache.之和。所以是-/+
查看空闲内存,确定应用是否有内存池测时,只能以free的第三行为依据,第二行其实作用不大・只是可以看到0S当前的buffer和 cache大小
2.3. IO
命令 iostat
http://www.man7.org/linux/man-pages/man1/iostat.1.html
%util表示IO这一时刻对CPU的占有率
2.4. network
命令 nicstat (需要安装)
wgethttp://sourceforge.net/projects/nicstat/files/nicstat-1.92.tar.gz
tar -zxvf nicstat-1.92.tar.gz
sudo vim Makefile
CFLAGS = $(COPT) -m32#将此行修改为如下: CFLAGS = $(COPT)
sudo make -f Makefile install