zoukankan      html  css  js  c++  java
  • 服务器系统调优之发现问题,还原问题

    1.系统状态监控

    操作系统调优工具

    观测cpu

    top 、htop、pidstat、mpstat、dstat,perf,vmstat(进程调度器,cpu队列,上下文,系统调用接口)

    内存:

    free ,top ,dstat ,vmstat , slabtop

     网络相关

    netstat,ss

    观测网卡:

    nicstat,sar,dtrace,/proc,ping,datat

    磁盘

    dstat,iostat,iotop,blktrace,dtrace

    应用程序和内核的调用

    strace

    重量级工具:开发一个程序

    systemtap, oprofile, perf, valgrind

    proc :内核的映像,与内核交互的接口

    CPU时钟周期的分配:(本地)

    1、cpu给出到本地内存控制器的内存地址

    2、内存控制器设置对内存地址的访问

    3、cpu在哪个内存地址执行读取或写入操作

    cpu调优

    1、将进程绑定到某颗cpu上

    taskset:

      处理器标示:十六进制掩码

          一个十六进制数字--->4位2进制

      0x00000001,1的二级制 0000 0001 标示第0颗cpu

      0x00000003,3的二进制   0000   0011 标示第0颗和第1颗

          0x00000008,   0000  1000 标示第3颗cpu

          0x00000009,   0000  1001 标示第3颗和第0颗

          0x0000000a,10二进制  0000 1010  标示地3和第1颗

          #taskset -p CPU_MASK PID

         taskset -c 0,4,5 --PID

        taskset 2中启动方式,1将已经运行的进程绑定到某颗cpu上,启动进程让其运行在某颗cpu上

    ps axo pid ,psr psr(处理器核心)观察那个进程运行在那个cpu上

     1、已经运行的进程

    taskset -pc 1,2 2047
    

    将已经运行的2047进程绑定到第1,2颗cpu上,此时可能由于该进程没有运行,需要激活一下才能重新调度cpu

    2、启动进程, 将某个进程启动并绑定cpu

    taskset -c 1,2, nginx
    

      

      

    打开文件

    在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。
    对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java
      等单进程处理大量请求的应用来说就有 点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,
      就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:
    lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
    在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:
    # lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
    131 24204
    57 24244
    57 24231
    56 24264
    其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
    ps -aef |grep 24204
    mysql 24204 24162 99 16:15 ? 00:24:25 /usr/sbin/mysqld
    哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。
    但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。
    Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:
    ulimit -HSn 4096
    以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,
    毕竟打开的文件句柄 数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,
    可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后。

    分析:

    1、

    [root@szdz-MASTER ]# lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more

    10572 3721
    815 13852
    178 12238
    164 16754

    [root@szdz-MASTER apache-tomcat-8.0.22]# ps aux | grep 3721
    chaijing 3721 6.4 21.3 6303700 3483492 ? Sl 2016 391:24 /path/to/jdk1.7.0_02/bin/java -Djava.util.logging.config.file=/path/to/apache-tomcat-8.0.22/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms3072m -Xmx3072m -XX:MaxNewSize=512m -XX:PermSize=256m -XX:+UseGCOverheadLimit -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -

    tomcat 打开的文件描述符到达了10572个

    2、  tomcat 进程打开的线程数

    [root@szdz-MASTER apache-tomcat-8.0.22]# ps -Lf 3721 | wc -l

    629

    3、查看tomcat的tcp状态发现close-wait过多

     netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  

    TIME_WAIT 861
    CLOSE_WAIT 4280
    SYN_SENT 1
    FIN_WAIT1 29
    FIN_WAIT2 66
    ESTABLISHED 720

    [root@szdz-MASTER 2]# ss -tunp | grep 3721 | grep CLOSE-WAIT | wc -l

    3699

      

  • 相关阅读:
    Web Storage中的sessionStorage和localStorage
    Javascrip获取页面URL信息
    SqlServer 查看备份文件中逻辑文件信息的Sql语句
    实用ExtJS教程100例-011:ExtJS Form 使用JSON数据赋值和取值
    实用ExtJS教程100例-010:ExtJS Form异步加载和提交数据
    实用ExtJS教程100例-009:ExtJS Form无刷新文件上传
    实用ExtJS教程100例-008:使用iframe填充ExtJS Window组件
    实用ExtJS教程100例-007:ExtJS中Window组件最小化
    实用ExtJS教程100例-006:ExtJS中Window的用法示例
    实用ExtJS教程100例-005:自定义对话框Ext.MessageBox.show
  • 原文地址:https://www.cnblogs.com/python-way/p/6211022.html
Copyright © 2011-2022 走看看