精华内容
下载资源
问答
  • 系统优化怎么做-Linux系统配置优化

    千次阅读 2018-07-22 12:44:54
    大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 知乎专栏:https://zhuanlan.zhihu.com/youhua  全网私活,免费订阅:http://www.zsihuo.com 在这里我会从基于J2EE系统及互联网架构方面,来谈谈系统优化的...

    大家好,这里是「聊聊系统优化 」,并在下列地址同步更新

    在这里我会从基于J2EE系统及互联网架构方面,来谈谈系统优化的各个方面,干货满满,欢迎订阅及关注!

     

    前言

    应用系统跑在操作系统上面,系统的性能也关系到应用程序的性能,这里讲一些Linux性能关键的配置信息。

    永久关闭selinux

    selinux提高系统安全性,但会造成很多麻烦,一般关闭
    [root@localhost ~]# vim /etc/selinux/config
    

    将SELINUX=enforcing改为SELINUX=disabled,保存后退出,重启生效

    [root@localhost ~]# reboot
    

    设定系统runlevel为3

    节约系统资源
    [root@localhost ~]# grep 3:initdefault /etc/inittab
    id:3:initdefault:
    [root@localhost  ~]# init 3
    

    加大系统文件描述符最大值

    vim /etc/security/limits.conf
    

    调整大小

    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 65536
    * hard nproc 65536
    

    说明:* 代表针对所有用户

    noproc 是代表最大进程数

    nofile 是代表最大文件打开数

    调整内核参数文件 /etc/syctl.conf

    配置网络参数来提高系统负载能力
    如果出现服务器丢包的情况,需要考虑是不是如下配置需要调整
    vim /etc/syctl.conf
    
    1. net.ipv4.tcp_syncookies = 1
      表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
    2. net.ipv4.tcp_tw_reuse = 1
      表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
    3. net.ipv4.tcp_tw_recycle = 1
      表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
    4. net.ipv4.tcp_fin_timeout = 30
      表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
    5. net.ipv4.tcp_keepalive_time = 1200 
      表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
    6. net.ipv4.ip_local_port_range = 1024 65000 
      表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
    7. net.ipv4.tcp_max_syn_backlog = 8192 
      表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
    8. net.nf_conntrack_max = 655360 
      在内核内存中netfilter可以同时处理的“任务”(连接跟踪条目)

    防火墙配置

    /etc/syctl 尾部加上如下防火墙相关配置

    有可能是sysctl.conf.first文件

    开启重用,回收 socket资源用于新的TCP链接

    net.ipv4.tcp_tw_reuse=1
    

    开启回收:

    net.ipv4.tcp_tw_recycle=1
    

    网络链接最大值及超时配置

    net.nf_conntrack_max = 25000000
    net.netfilter.nf_conntrack_max = 25000000
    net.netfilter.nf_conntrack_tcp_timeout_established = 180
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
    

    net.nf_conntrack_max

    nf_conntrack_max决定连接跟踪表的大小,默认值是65535,可以根据系统内存大小计算一个合理值:CONNTRACK_MAX = RAMSIZE(in bytes)/16384/(ARCH/32),如32G内存可以设置1048576;

    nf_conntrack_buckets

    决定存储conntrack条目的哈希表大小,默认值是nf_conntrack_max的1/4,延续这种计算方式:BUCKETS = CONNTRACK_MAX/4,如32G内存可以设置262144;

    net.netfilter.nf_conntrack_max

    最大连接数

    net.netfilter.nf_conntrack_tcp_timeout_established

    决定ESTABLISHED状态连接的超时时间,默认值是5天,可以缩短到1小时,即3600。

    net.netfilter.nf_conntrack_tcp_timeout_time_wait

    决定WAIT状态连接的超时等待时间

    net.netfilter.nf_conntrack_tcp_timeout_close_wait

    决定关闭状态连接的超时等待时间

    net.netfilter.nf_conntrack_tcp_timeout_fin_wait

    决定WAIT状态连接的超时等待时间

    以上配置生效

    sysctl –p
    

    常见异常

    • too many open files(打开的文件过多)

    程序在Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。

    在高并发情况或者程序代码中没有正确关闭IO, 并系统限制比较小的情况下,系统在运行一段时间后,程序打开句柄数超过系统限制的时候抛出该异常
    • 连接服务器超时
    一般TimeWait进程数过多
    原因一般为 应用程序没有正确关闭连接,导致服务器TIME_WAIT进程过多,主动关闭连接导致TIME_WAIT产生。先检查程序及系统以上配置

    常见命令

    查看机器网络状态状态

    netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'LAST_ACK 
    

    状态:描述
    CLOSED:无连接是活动的或正在进行
    LISTEN:服务器在等待进入呼叫
    SYN_RECV:一个连接请求已经到达,等待确认
    SYN_SENT:应用已经开始,打开一个连接
    ESTABLISHED:正常数据传输状态
    FIN_WAIT1:应用说它已经完成
    FIN_WAIT2:另一边已同意释放
    ITMED_WAIT:等待所有分组死掉
    CLOSING:两边同时尝试关闭
    TIME_WAIT:另一边已初始化一个释放
    LAST_ACK:等待所有分组死掉

    总结

    Linux提供了丰富的内核参数供使用者调整,调整得当可以大幅提高服务器的处理能力

    展开全文
  • 1、系统安装最小化 1)根据经验,选择安装包时应该按最小化原则,即不需要的或者不确定是否需要的就不安装,这样可以最大程度上确保系统安全。 2)如果安装过程落了部分包组或者其他伙伴安装时没选,再安装后可以...

    1、系统安装最小化

    1)根据经验,选择安装包时应该按最小化原则,即不需要的或者不确定是否需要的就不安装,这样可以最大程度上确保系统安全。

    2)如果安装过程落了部分包组或者其他伙伴安装时没选,再安装后可以按如下方式补上安装时未安装的包组:

    yum groupinstall "Compatibility libraries" "Base" "Development tools"

    yum groupinstall "debugging Tools" "Dial-up Networking Support"

    可以通过yum groupinfo 包组查看具体安装的组件。

    注意:不要使用yum的删除功能删除软件,会删除相关依赖,导致意外问题。

    3) 安装系统补装工具命令

    安装系统后还会有一些基本的工具没装,这时可以根据需求yum来安装下,啥时用啥时装也可。例如:

    yum install tree nmap sysstat lrzsz dos2unix -y

    如果需要更新补丁则执行

    yum update

    2、系统权限最小化

    linux/unix是一个多用户、多任务的操作系统。

    超级管理员(root): root默认在unix/linux操作系统中拥有最高的管理权限。比喻:皇帝。

    普通用户:管理员或者具备管理权限的用户创建的。权限:系统管理仅可以读、看,不能增、删、改。

    权限越大,责任越大。

    可使用如下命令添加一个普通用户账号,并为其设置口令:

    [root@oldboy ~]# useradd luffy

    [root@ oldboy ~]# passwd luffy ###问你新的密码,然后你输入 交互设置密码

    Changing password for user luffy.

    New password:

    BAD PASSWORD: it is too simplistic/systematic #ç提示密码太简单了,但可以不理会。

    BAD PASSWORD: is too simple

    Retype new password:

    passwd: all authentication tokens updated successfully.

    提示:

    非交互式设置密码:还可通过下面的命令一步到位地设置密码(其中,luffy为用户名,密码为123456)。

    echo "123456"|passwd --stdin luffy && history -c

    尝试切换用户角色,命令如下:

    [root@ oldboy ~]# su - luffy <==由root管理员,切换到普通用户luffy

    [luffy@ oldboy ~]whoami<==查看当前用户是什么luffy[luffy@oldboy ] su - root <==切回到root用户

    Password:

    说明:

    1)超级用户root切换到普通用户下面,无需输入对应用户密码,这相当于“皇帝”去“大臣”家里。

    2)普通用户切换到root或其他普通用户下,需要输入切换的对应用户密码。

    3)普通用户的权限比较小,只能进行基本的系统信息查看等操作,无法更改系统配置和管理服务。

    4)符号是普通用户的命令行提示符,#符号是超级管理员的提示符。示例如下: [luffy@ oldboy ~] #普通用户luffy对应的提示符

    [root@ oldboy ~]# #超级管理员root对应的提示符

    5)提示符@前面的字符代表当前用户(可用whoami查询),后面的为主机名(可用hostname查询),~所在的位置是窗口当前用户所在的路径。示例如下:

    [luffy@ oldboy ~]#luffy为当前用户,Oldboy为主机名,~表示当前目录,即家目录。 6)Linux命令提示符由PS1环境变量控制。示例如下: [root@ oldboy ~]# echoPS1

    [\u@\h \W]$

    这里的PS1='[\u@\h \W]′,可以通过全局变量配置/etc/profile文件调整PS1=′[\u@\h\W\t] '。

    注意:PS1必须大写的。

    参数 含义

    \d 代表日期,格式为weekday month date。

    \H 完整的主机名称。

    \h 仅取主机的第一个名字。

    \t 显示时间为24小时格式,如HHMMSS。

    \T 显示时间为12小时格式。

    \A 显示时间为24小时格式HHMM。

    \u 当前用户的账号名称。

    \v BASH的版本信息。

    \w 完整的工作目录名称。家目录会以~显示

    \W 利用basename取得工作目录名称,所以只会列出最后一个目录

    \# 下达的第几个命令

    $ 提示字符,如果是root时,提示符为# ,普通用户则为变量(放东西查看变量的内容)PS1−−−变量的名字−−−−−−藏经阁里面的武功秘籍(葵花宝典)秘籍名字(书名)PS1---查看变量里面的内容---手端着书(葵花宝典) 看书的内容(读书) PS1=新的内容 ---向变量里面放入东西----修改书的内容(升级书) 欲练此功,必先自宫,若不自宫,也能成功。 linux变量名字(书名)大写的一般是自己用(linux环境变量),在哪里都可以用的变量

    3、关闭SELinux       

    SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里我们还是把它给关闭了吧,至于安全问题,后面通过其他手段来解决,这也是大多数生产环境的做法,如果非要开启也是可以的。

    关闭方式如下

    永久关闭selinux

    # 备份

    cp /etc/selinux/config /etc/selinux/config.bak

    # sed修改,看看结果,不加-i

    sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

    # 确认并使用 sed -i 修改文件内容

    sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

    # 检查结果

    grep "disabled" /etc/selinux/config

    临时关闭selinux

    setenforce 0

    # 数字0表示Permissive,即给出警告提示,但不会阻止操作,相当于disabled。

    # 数字1表示Enforcing,即表示SElinux为开启状态。

    getenforce # 查看命令

    命令说明:

    setenforce:用于命令行管理SELinux的级别,后面的数字表示设置对应的级别。

    getenforce:查看SELinux当前的级别状态。

    提示:修改配置SElinux后,要想使其生效,必须要重启系统。因此,可配合使用setenforce 0这个临时使其关闭的命令,这样在重启前后都可以使得SElinux关闭生效了,也就是说无须立刻重启服务器了,在生产场景下Linux机器是不能随意重启的(不要给自己找任何理由重启)。

    4、关闭iptables(C6)或Firewalld(C7)防火墙

    关闭防火墙的目的是为了让初学者学习更方便,将来在学了iptables技术后可再统一开启。 在企业环境中,一般只有配置外网IP的linux服务器才需要开启防火墙,但即使是有外网IP,对于高并发高流量的业务服务器仍是不能开的,因为会有较大性能损失,导致网站访问很慢,这种情况下只能在前端加更好的硬件防火墙了。 关闭防火墙的具体操作过程如下:

    CentOS 6.x

    关闭防火墙

    [root@oldboyedu ~]# /etc/init.d/iptables stop 

    [root@oldboyedu ~]# /etc/init.d/iptables stop #<==重复执行下确认已关闭。

    查看是否关闭

    [root@oldboyedu ~]# /etc/init.d/iptables status 

    iptables: Firewall is not running.

    关闭开机自启动命令,前面已经关闭这里就无需执行。

    [root@oldboyedu ~]# chkconfig iptables off 

    [root@oldboyedu ~]# chkconfig --list|grep ipt

    iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off

    CentOS7.x

    关闭防火墙

    [root@oldboyedu ~]# systemctl stop firewalld

    关闭开机自启动

    [root@oldboyedu ~]# systemctl disable firewalld

    查看防火墙状态

    [root@oldboyedu ~]# systemctl is-active firewalld #是否正在运行

    [root@oldboyedu ~]# systemctl is-enabled firewalld #是否开机自启动

    关闭NetworkManager

    [root@oldboyedu ~]# systemctl stop NetworkManager

    [root@oldboyedu ~]# systemctl disable NetworkManager

    5、更改SSH远程默认的22端口

    sed -i 's#\#Port 22#Port 7777#g' /etc/ssh/sshd_config

    service sshd restart

    6、使用国内镜像做yum源

    默认国外的yum源(软件仓库)比较慢,所以换成国内的。

    备份

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    下载新的CentOS-Base.repo 到/etc/yum.repos.d/

    CentOS 5

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

    或者

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

    CentOS 6

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

    或者

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

    CentOS 7

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

    或者

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

    之后运行yum makecache生成缓存,此步骤可以不执行。

    7、epel源的安装

    备份(如有配置其他epel源)

    mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

    mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

    下载新repo 到/etc/yum.repos.d/

    epel(RHEL 7)

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

    epel(RHEL 6)

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

    epel(RHEL 5)

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo

    更换查看帮助的网站mirrors.aliyun.com

    8、关于网络下载命令

    curl

    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。

    常用参数

    -o --output,把输出写到该文件中

    -O --remote-name,把输出写到该文件中,保留远程文件的文件名

    -I --head,只显示传输文档,经常用于测试连接本身

    -s --silent,静默模式,不输出任何东西

    -T --upload-file,上传文件

    -V --version,显示版本信息

    -f --fail,只输出错误信息

    -# --progress-bar,用进度条显示当前的传送状态

    -H --header,自定义标题传递到服务器

    -v --verbose,详细显示请求报文结构和响应报文结构信息

    wget 主要用于下载文件

    wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成

    wget 可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。

    常用参数

    -V --version,显示 Wget 的版本信息并退出。

    -h --help,打印此帮助。

    -b --background,启动后转入后台。

    -O --output-document=FILE,将文档写入 FILE。

    -q --quiet,安静模式(无信息输出)。

    -v --verbose,详尽的输出(此为默认值)。

    9、安装常用软件

    为了使用方便,可以安装一些常用的软件。

    yum -y install tree nmap sysstat lrzsz dos2unix telnet bash-completion bash-completion-extras vim nc lsof net-tools rsync

    10、升级具有典型漏洞的软件版本

    诸如openssl、openssh、bash爆出很多软件漏洞,在企业场景需要进行修复漏洞操作,步骤如下:

    首先查看相关软件的版本号。

    [root@Oldboy ~]# rpm -qa openssl openssh bash

    openssl-1.0.1e-30.el6.x86_64

    bash-4.1.2-29.el6.x86_64

    openssh-5.3p1-104.el6.x86_64

    执行升级已知漏洞的软件版本到最新,命令如下:

    [root@Oldboy ~]# yum install openssl openssh bash -y

    [root@Oldboy ~]# rpm -qa openssl openssh bash

    openssh-5.3p1-104.el6_6.1.x86_64

    bash-4.1.2-29.el6.x86_64

    openssl-1.0.1e-30.el6_6.5.x86_64

    11、时间同步

    echo '#Timing synchronization time' >/var/spool/cron/root

    echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >/var/spool/cron/root

    crontab -l

    12、加大文件描述

    echo '* - nofile 65535 ' >>/etc/security/limits.conf 

    tail -1 /etc/security/limits.conf

    13、别名和环境变量优化

    cat>>/etc/profile.d/color.sh<<EOF

    alias ll='ls -l --color=auto --time-style=long-iso'

    PS1='

    \e[32;1m

    [\u@\h \W]$

    \e[0m

    '

    export HISTTIMEFORMAT='%F-%T '

    EOF

    14、内核优化

    cat >>/etc/sysctl.conf<<EOF

    net.ipv4.tcp_fin_timeout = 2

    net.ipv4.tcp_tw_reuse = 1

    net.ipv4.tcp_tw_recycle = 1

    net.ipv4.tcp_syncookies = 1

    net.ipv4.tcp_keepalive_time = 600

    net.ipv4.ip_local_port_range = 4000 65000

    net.ipv4.tcp_max_syn_backlog = 16384

    net.ipv4.tcp_max_tw_buckets = 36000

    net.ipv4.route.gc_timeout = 100

    net.ipv4.tcp_syn_retries = 1

    net.ipv4.tcp_synack_retries = 1

    net.core.somaxconn = 16384

    net.core.netdev_max_backlog = 16384

    net.ipv4.tcp_max_orphans = 16384

    EOF

    sysctl -p

    15、修改主机名和IP脚本

    [root@oldboy ~]# cat /server/scripts/hostname_ip.sh 

    #!/usr/bin/sh

    if [ # -ne 2 ];then   echo "/bin/sh0 hostname PartIP"

    exit 1

    fi

    hostnamectl set-hostname $1

    sed -i "s#100#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]

    systemctl restart network

    16、更改Linux特殊变量

    临时生效:

    export TMOUT=10        账号超时时间控制台变量(类似于Windows的锁屏)

    export HISTSIZE=5          命令行历史记录数量(历史记录越少越好)

    export HISTFILESIZE=5   命令行命令对应文件的记录数~/.bash_history

    永久生效:

    echo 'export TMOUT=300' >>/etc/profile

    echo 'export HISTSIZE=5' >>/etc/profile

    echo 'export HISTFILESIZE=5' >>/etc/profile

    source /etc/profile

    17、隐藏Linux版本信息

    cat /etc/issue

    >/etc/issue

    >/etc/issue.net

    这时候就没有任何版本信息了

    18、如何防止显示中文乱码(该优化初期建议不优化,直接强制看英文)

    此项优化为可选项,即调整Linux系统的字符集设置,那么,什么是字符集呢?

    简单的说,字符集就是一套文字符号及其编码。目前Linux下常用的字符集有:

    GBK:定长,双字节,不是国际标准,支持的系统不少,实际企业用的不多。

    UTF-8:非定长,1~4字节,广泛支持,MYSQL也使用UTF-8,企业广泛使用。 可通过快捷的命令方式在/etc/sysconfig/i18n中添加如下内容,使其支持中文显示:

    CentOS 6.x修过过程

    [root@ oldboy ~]# echo LANG                ###查看系统当前的字符集 en_US.UTF-8 [root@ oldboy ~]# cat /etc/sysconfig/i18n   #####系统字符集配置文件的位置 LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" [root@Oldboy ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori  ####备份 [root@Oldboy ~]# echo 'LANG="zh_CN.UTF-8"'  >/etc/sysconfig/i18n ####修改配置文件 #→相当于用vi /etc/sysconfig/i18n 添加LANG="zh_CN.UTF-8"内容 [root@Oldboy ~]# source /etc/sysconfig/i18n #→使上文修改生效    ###让配置文件生效 [root@Oldboy ~]# echoLANG ###查看系统当前的字符集

    zh_CN.UTF-8

    CentOS 7.x修过过程

    修改/etc/locale.conf这个文件

    提示:

    乱码的核心解决方法:

    系统字符集(utf-8)

    xshell软件的字符集保持一致(utf-8)

    文件使用的字符集一致

    zh_CN.GBK

    注意“zh_CN.UTF-8”的大小写字母。

    这个中文显示配置要跟你自己的SSH客户端的配置一致。

    Linux基础优化与安全重点小结

    不用root登录管理系统,而以普通用户登录通过sudo授权管理。

    更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至要更改SSH服务只监听内网IP。

    定时自动更新服务器的时间,使其和互联网时间同步。

    配置yum更新源,从国内更新源下载安装软件包。

    关闭SELinux及iptables(在工作场景中,如果有外部IP一般要打开iptables,高并发高流量的服务器可能无法开启)。

    调整文件描述符的数量,进程及文件的打开都会消耗文件描述符数量。

    定时自动清理邮件临时目录垃圾文件,防止磁盘的inodes数被小文件占满(注意Centos6和Centos5要清除的目录不同)。

    精简并保留必要的开机自启动服务(如crond、sshd、network、rsyslog、sysstat)。

    Linux内核参数优化/etc/sysctl.conf,执行sysctl -p生效。

    更改系统字符集为“zh_CN.UTF-8”,使其支持中文,防止出现乱码问题。

    锁定关键系统文件如/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab,处理以上内容后把chattr、lsattr改名为luffy,转移走,这样就安全多了。

    清空/etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。

    清除多余的系统虚拟用户账号。

    为grub引导菜单加密码。

    禁止主机被ping。

    打补丁并升级有已知漏洞的软件。 新系统 yum –y install 已经在线上用的服务器 web服务器能够停止。

     

    展开全文
  • Linux系统优化基础和系统监控

    万次阅读 2017-09-26 20:01:11
    一些linux的系统优化方法
    
    系统优化  
    
    系统优化有其两面性,选择优化一个选项的时候,总会牺牲另一个选项的性能 
    
    优化的几个方向:
    加硬件  
    架构	
    (资源流动性)
    
    linux系统优化,调优
    (微调)
    
    redhat官方文档
    Red_Hat_Enterprise_Linux-7-Performance_Tuning_Guide-zh-CN.pdf
    
    业务上线之前的优化:
    1,安装系统优化
    以自用环境500G硬盘为例:
    /boot	300M-500M  (只存放grub和启动有关文件,不存放其它) 
    /       100G-150G(因为很多人默认会把各种东西放到根目录下,没有单独挂载的分区都属于根);
    swap	内存小就一般分2倍,内存大(现在的服务器16G以上内存很常见)就最大4G或8G
    /var    50-100G (主要存放日志,邮件,ftp,httpd等家目录,kvm的磁盘文件等)
    /vm	50-100G (主要存放vmware虚拟机)
    /data	50G-100G左右 (主要存放你的个人数据)
    还需要留一点空间用于以后分区用。
    如果你的系统出了严重问题,能排错就排错,不能或很麻烦在重装时只格式化根分区就可以了,重装完后,改写/etc/fstab
    根分区分得太小,满了怎么办?如果是lvm可以在线扩容,没用lvm只能去把根分区下的一些数据移到其它分区 (除非用新一代文件系统如btrfs这种;xfs文件可以使用xfs_growfs来扩容)
    b,软件包的选择:你需要啥就安装啥(如果你非常在意系统瘦身,那么选择最小化安装,再安装应用时少啥就装啥)
    c,bios(UEFI)和grub加密码增强安全性和磁盘加密
    
    
    
    swap有两种做法(swap文件和swap分区,swap分区会更有效,建议使用swap分区)
    swap文件做法如下
    # dd if=/dev/zero of=/test/swapfile bs=1M count=1000
    # mkswap /test/swapfile
    # swapon /test/swapfile
    # swapoff /test/swapfile   --不用了就swapoff(swapon的反向操作)
    
    swap加分区做法:
    先使用fdisk或parted分一个区,如/dev/sdaX
    # mkswap /dev/sdaX
    # swapon /dev/sdaX
    最后写到fstab里
    
    
    2,
    a,关闭不用的服务 (service xxx stop;systemctl stop xxx 或 chkconfig xxx off;systemctl disable xxxx或 ntsysv --level 2345)
    有几个服务记录不要关闭了:haldaemon,messagebus这两个服务关闭任意一个,就造成开机鼠标键盘无法用(rhel6下的经验,rhel7未测试,rhel7没有haldaemon服务了)
    常见的不关闭服务:network,sshd,rsyslog,libvirtd,ntpd等
    b,没有服务脚本的可以写服务脚本,或者有些服务脚本写得不好,你可以修改代码
    c,服务脚本权限降权(chmod 700 -R /etc/init.d/*),或者结合sudo进行相应授权
    d,没有服务脚本的进程,可以使用kill来关闭(注意kill -9和kill -15的区别)
    
    
    3,静态IP,网关,dns指向
    # /etc/init.d/NetworkManager stop
    # chkconfig NetworkManager off
    然后配置静态ip
    # vim /etc/sysconfig/network-scripts/ifcfg-xxx
    DEVICE=xxx
    ONBOOT=yes
    NM_CONTROLLED=no
    BOOTPROTO=static
    IPADDR=x.x.x.x
    NETMASK=x.x.x.x
    GATEWAY=x.x.x.x
    DNS1=x.x.x.x
    DNS2=x.x.x.x
    
    rhel7里的nmcli命令非常强大,可以几乎控制网络相关的一切修改
    
    4,主机名配置和绑定
    问题:域名和主机名有什么区别?
    域名:公网名字,花钱买,唯一
    主机名:内网名字
    
    如果公司现在有100甚至更多台机器,都要互相绑定主机名
    方法一:shell脚本,先在其中一台绑定所有机器的IP与名字到/etc/hosts文件,再用shell脚本循环拷到其它所有机器(ssh等效性或expect)
    方法二:在安装所有机器时,使用kickstart或cobbler,让其在安装的时候就通过postscripts实现安装完后就统一截IP,配置主机名,绑定主机名);此方法不适合主机名有改变的情况 
    方法三:内网DNS(/etc/nsswitch.conf这个文件里面配置了,称查找/etc/hosts,再查找DNS)
    方法四:使用自动化运维工具,如puppet,ansible,saltslack......
    
    
    5,yum配置
    首先要注意yum只能安装rpm包,不能安装源码包。如果觉得安装源码包麻烦,甚至可以自己把源码做成rpm包(要求水平较高)
    
    一般不可能所有服务器都用公网的yum源。建议把本地iso和第三方下载的rpm包都在其中一台服务器做成yum仓库,其他服务器就直接使用这台的yum源就可以了
    
    yum的路径怎么写?
    答案:要写repodata的上一级目录的路径
    
    如何下载
    a),先配置远程公网yum源路径
    如下
    [puppet]
    name=puppet
    baseurl=http://yum.puppetlabs.com/el/6.5/products/x86_64/
    enabled=1
    gpgcheck=0
    
    b)使用reposync命令
    reposync --repoid=puppet
    
    都会下载到本地当前目录
    
    c)因为下载后,没有repodata目录,所以需要手动生成
    yum install createrepo -y
    createrepo  下载的目录路径/
    
    d)通过服务如httpd做成其它服务器能使用的yum源
    
    
    --------------------------------------------------------------------
    扩展使用yum要注意的一个小例子
    使用yum remove  删除软件包时,一般会删除一些依赖包,然后 yum install重新安装,不一定会把这些依赖包自动装回来。所以建议都把这些依赖包手动再安装回来
    
    
    # rpm -qa |grep ^mysql		--我这里查找到已经安装了这么多mysql的软件包
    mysql-devel-5.1.71-1.el6.x86_64
    mysql-test-5.1.71-1.el6.x86_64
    mysql-server-5.1.71-1.el6.x86_64
    mysql-connector-java-5.1.17-6.el6.noarch
    mysql-5.1.71-1.el6.x86_64
    mysql-libs-5.1.71-1.el6.x86_64
    mysql-bench-5.1.71-1.el6.x86_64
    mysql-connector-odbc-5.1.5r1144-7.el6.x86_64
    
    下面我需要重装这些软件包,在使用yum remove mysql*时删除的包包括依赖性特别的多,这样很可能会因为删除了其它服务需要使用的rpm包,而造成其它服务或系统其它的功能缺失
    
    
    解决方法:
    方法一:
    rpm -e mysql-5.1.71-1.el6.x86_64 --nodeps
    rpm -e mysql-devel-5.1.71-1.el6.x86_64 --nodeps
    rpm -e mysql-server-5.1.71-1.el6.x86_64 --nodeps
    rpm -e mysql-test-5.1.71-1.el6.x86_64 --nodeps
    rpm -e mysql-connector-java-5.1.17-6.el6.noarch --nodeps
    rpm -e mysql-libs-5.1.71-1.el6.x86_64 --nodeps
    rpm -e mysql-bench-5.1.71-1.el6.x86_64 --nodeps
    rpm -e mysql-connector-odbc-5.1.5r1144-7.el6.x86_64 --nodeps
    再重装回来
    yum install mysql* 
    
    
    方法二:
    rpm -qa |grep ^mysql |xargs rpm -e --nodeps
    再重装回来
    yum install mysql*
    
    
    方法三:
    直接使用yum remove mysql*  去删除包
    再用下面的命令重装回来
    # cat /var/log/yum.log |grep "Jun 04" |grep Erased |awk '{print $NF}' |xargs  yum install -y
    
    
    --上面三个方法最好的应该是方法二,操作快速,而且不会像方法三那样去删除了其它的依赖性包(因为你删除其它的依赖性包,就算是再安装回来,那么原来的配置文件被刷新了)
    
    6,用户有关的:
    a,删除不需要使用的用户(如adm,lp,sync,shutdown等)加强安全(可选)
    b,写脚本定期检查无密码账号或uid为0的账号	awk -F: '$3==0 {print $1}' /etc/passwd
    c,创建要用的普通用户(如果一个用户只用于跑服务daemon,可以指定家目录为/dev/null,uid小于500,登录环境为/sbin/nologin等,如useradd -r -d /dev/null  -s /sbin/nologin xxx) 看需求修改/etc/login.defs文件。或者在登录或登出时有些特殊需要,可以修改/etc/skel/.bash_profile和/etc/skel/.bash_logout
    d,做完后,保证口令文件的安全(如,不需要修改就chattr +i /etc/passwd,chattr +i /etc/shadow,chattr +i /etc/group,chattr +i /etc/gshadow)
    e,对相应的普通用户做sudo授权
    f,设置用户自动退出登录时间限制
       如:在/etc/profile里加入 TMOUT=300 表示5分钟不操作,会自动退出
    
    7,按需求定制pam,iptables(firewalld)或selinux的配置
    
    
    8,内核优化:内核编译优化和内核参数优化(这里讨论内核编译优化)
    如果有必要,并且技术水平成熟的情况下,可以重新编译升级内核
    问题:OS自带的内核非常稳定,什么情况下需要自己编译内核?
    答案:内核如果不支持你所需要的一个功能,可以重编内核来加上这个功能。但是一般来说,没有内核不支持的功能,但redhat自带的内核不一定给你加上了这个功能。
    比如,要在linux下支持ntfs格式挂载,方法有:
    一,重编内核,加上ntfs挂载功能(因为redhat默认没有加到内核里,但内核是支持的)
    二,用第三方软件,把功能做成模块加到内核上,让其支持
    还有一个情况需要自己编译内核,就是内核编译优化,简单来说就是把内核里自己用不到的功能都去掉,只留下自己用得到的功能。
    
    注意:生产环境不建议你真的去编译内核,因为你很难编译出一个稳定且正符合你所用的内核。
    
    重编译内核或新内核的步骤:
    a)下载新内核源码,解压;OS自带内核源码在(/usr/src/kernels/`uname -r`/,如果此内核源码目录不存在,可以通过yum install kernel-devel -y安装)
    b)cd 内核源码目录/
    c)make menuconfig
      按你需求来选择功能 
    	* 代表编进内核
    	M 代表编译成模块  需要modprobe  xxx装载才能使用
            空 代表不需要这个功能
    d) 选择好功能后,保存,会把你所有的选择保存到一个.config文件里
    e) make
    f) make modules_install    --把编译后的模块复制到/lib/modules/内核新版本/  以后就可以用modprobe insmod来装载使用
    g) make install
    h) reboot 重启你的系统,在grub菜单选择新的内核登录你的OS
    
    
    
    9,文件系统
    ext2,ext3,ext4,fat32,ntfs,xfs,reiserfs,zfs,btrfs,jfs,nfs,gfs2,ocfs......
    下面以rhel6默认ext4为例简单讨论ext4的优化
    a,单个文件可以chattr +A xxx 让这个文件的atime不变化(因为atime是文件的访问时间,基本没什么实用价值,所以让其不变化,就是一种优化)
    b,只优化单个文件肯定不行,所以需要优化整个文件系统让所有文件atime都不变化
     在rhel5里cat一次,atime就会变一次
     在rhel6里只有当atime时间早于或等于mtime或ctime之一时,cat这个文件,atime才会变(因为rhel6已经做了相对的优化,主要实现的方法是在mount时加了relatime)
     但我们想优化更彻底,那么让atime在任何情况下都不会变,做法为:
    # mount -o defaults,noatime /dev/sda7 /test/	--这样做后,/dev/sda7这个分区里的所有文件都不变改变atime了
    
    
    mount -o defaults,norelatime,strictatime /dev/sda7 /test/  --这样做是做成和rhel5一致,每cat一次文件,文件的atime都会变
    
    
    所有分区都要这样做,就在/etc/fstab里把所有分区的defaults参数后加,noatime就可以了
    
    但写到fstab里需要重启才能生效,因为根分区不能umount再mount,所以要使用下面remount的参数在线重挂载
    # mount -o remount,defaults,noatime /
    
    
    c,Ext4 提供三种数据日志记录方式: data=writeback 、 data=ordered  (默认) data=journal。
    
     data=writeback   速度最快,但不记录文件系统日志,只记录基本元数据,数据安全性低 
     data=journal     速度最慢。但记录完整文件系统日志,数据安全性高	
     data=ordered	  居中
    如果要修改,在mount时用-o data=writeback来挂载就可以.或者在/etc/fstab里defaults,data=writeback就可以了
    
    小实验:
    用一个实验分区,分三种日志记录方式去挂载,然后使用dd命令写文件来测试比较速度
    mount -o defaults,data=writeback /dev/sda7 /test/
    cd /test
    dd if=/dev/zero of=test
    --最快
    
    mount -o defaults,data=journal /dev/sda7  /test
    cd /test
    dd if=/dev/zero of=test
    --最慢
    
    mount -o defaults,data=ordered /dev/sda7 /test
    cd /test
    dd if=/dev/zero of=test
    --居中
    
    
    综合上面所述,你可以在/etc/fstab文件里把defaults改为defaults,noatime,data=writeback来提高文件系统速度
    
    
    小实验:
    使用下面命令模拟一个分区丢失superblock,相当于是文件系统出问题
    # dd if=/dev/zero of=/dev/sda9 bs=1 count=1024 seek=1024
    
    文件系统出问题,挂载就会报下面的错误
    # mount  /dev/sda9 /mnt/
    mount: you must specify the filesystem type
    
    
    排错,不能直接重新格式化,那样的话数据全丢了.所以可以用下面的命令修复
    # fsck /dev/sda9
    
    小实验:
    把你系统时间改到将来,然后把开机要挂载的分区重新挂载一下(比如boot分区或根分区这种),然后reboot重启系统
    
    会在启动系统时启不来,会报一个"分区挂载时间在将来的错误",解决方法也是fsck接要修复的分区
    
    =============================================================================================================
    
    
    优化
    横向:加新的设备,架构扩展
    纵向:替换新的更好的设备,使设备负载能力更高
    
    下面我们讨论的是不加设备也不换设备的基础上进行系统微调
    
    
    前面讨论的是系统安装到业务上线之前的一些基本优化,如果业务已经在线上,你要优化,第一步如何做?
    
    
    	比如一个web服务器慢,可以会有哪些问题?
    思路:
    	cpu->mem->io->file system->network->os参数->服务本身配置-》开发代码
    
    首先要进行服务器数据采集,和性能监测分析
    方法有
    一:使用cacti,nagios,zabbix等监控工具
    二:使用linux自带的一些监控指令:如vmstat,iostat,mpstat,sar等等
    
    		硬件问题
    
    		CPU子系统   	
    		内存子系统 
    		IO子系统      
    		网络子系统	
    
    		文件系统
    		运行的服务等
    
    一,
    cpu(Central Processing Unit)子系统 
    
    CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,
    比如拷贝一个文件通常占用较少CPU,只是在完成拷贝以后给一个中断让CPU知道拷贝已经完成
    
    科学计算通常占用较多的CPU,大部分计算工作都需要在CPU上完成,内存、硬盘等子系统只做暂时的数据存储工作
    要想监测和理解CPU的性能需要知道一些的操作系统的基本知识,比如:中断,进程调度,进程上下文切换,可运行队列等
    
    
    cpu单核在同一个时间点只能干一件事,但单核CPU一样可以跑多任务操作系统,其实就是分CPU资源(时间片)
    
    
    CPU很无辜,是个任劳任怨的打工仔,每时每刻都有工作在做(进程、线程)并且自己有一张工作清单(可运行队列),
    由老板(进程调度)来决定他该干什么,他需要和老板沟通以便得到老板的想法并及时调整自己的工作  (上下文切换),
    部分工作做完以后还需要及时向老板汇报(中断),
    所以打工仔(CPU)除了做自己该做的工作以外,还有大量时间和精力花在沟通和汇报上。
    
    
    	中断	设备通知内核,完成了一次数据处理过程。也可以理解为:cpu停止下来去执行别的指令。例如:完成一次IO。或者完成一次网络数据包的发送。
    	内核处理过程 --- 控制优先级,进行任务调度。
    	用户进程
    	上下文切换 --- 把正在占用cpu的进程放回队列中(每次内核的上下文切换,资源被用于关闭在CPU寄存器中的线程和放置在队列中)
    	运行队列
    
    
    
    那么监测CPU性能的底线是什么呢?通常我们期望我们的系统能到达以下目标:
    
    
      CPU利用率,如果CPU有100%利用率,那么应该到达这样一个平衡:65%-70% User Time,30%-35% System Time,0%-5% Idle Time;
    
      上下文切换,上下文切换应该和 CPU 利用率联系起来看,如果能保持上面的 CPU 利用率平衡,大量的上下文切换是可以接受的;
    
    
    云(虚拟化)  提高资源利用率
    
    
    
    
    查看cpu信息
    # cat /proc/cpuinfo   --能看到指令集,CPU核数,频率,缓存等相关信息
    # lscpu
    
    
    要采集CPU当前正在运行的信息数据,要用到下面的命令或者监控软件(nagios,zabbix等)
    top
    uptime		
    vmstat
    mpstat --需要yum install sysstat
    sar  --需要yum install sysstat
    
    
    
    # vmstat 2  	每2秒钟采集一下数据
    # vmstat 2 3 	每2秒钟采集一次,一共采集3次
    
    # vmstat 2
    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  78112  63432 1519100    0    0   233    18 1906 1190 26 13 59  1  0
     1  0      0  78112  63432 1519100    0    0     0     0 4180 1378 33 17 50  0  0
     1  0      0  78112  63440 1519092    0    0     0    30 4284 1706 33 17 50  0  0
    
    
    r	可运行队列。单核cpu,不应该超过3(经验得到的数据,只是表明大于这个值表明运行队列有点长)
    b	当前被阻塞的进程,一般这些进程都是在等待某些外部资源而被阻塞。>3需要注意,而且一直出现或者经常出现,就更值得注意
    in	中断数。一般代表大量设备操作成功通知内核。
    cs	上下文切换。一般代表任务需要紧急被cpu处理。数字高,只能说明内核在充分发挥它的任务调度作用。不能简单通过该数字判断cpu就出现瓶颈。
    us	用户进程所占用的cpu时间的百分比
    sy	内核在进行任务调度所占用的cpu时间的百分比
    id	cpu空闲所占用的时间百分比.仅仅0不能简单判断cpu出现瓶颈,只能说它被充分被留用。
    wa	等待IO所消耗时间百分比
    st	被硬件虚拟化的虚拟机所消耗掉的时间百分比
    
    
    
    
    
    
    mpstat 和 vmstat 类似,不同的是 mpstat 可以输出多个处理器的数据
    
    
    # mpstat  -P ALL 1	---P ALL表示查看所有CPU核, 1表示每一秒显示一次
    10:46:35 AM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
    10:46:36 AM  all   26.13    0.00    6.53    0.00    3.52    9.05    0.00   54.77  19478.22
    10:46:36 AM    0   25.74    0.00    6.93    0.00    2.97    7.92    0.00   56.44   9740.59
    10:46:36 AM    1   26.73    0.00    6.93    0.00    3.96   10.89    0.00   51.49   9739.60
    
    
    
    # sar -u  查看cpu相关的历史数据	--这是历史数据,是每十分钟会去采集一次系统相关的数据
    # sar -u 2 3	--两秒一次,显示三次(不是历史数据,是当前动态数据)
    
    
    
    sysstat  --> 提供 sar 命令		(system activity reporter)
    
    sar的特点:可以对过去时间的系统状态进行分析,但不能对某个进程进行深入分析,只能对系统的整体情况进行分析。
    
    yum install sysstat   -y		
    
    # systemctl start sysstat 
    # systemctl enable sysstat
    
    
    
    安装systat包后,就会自动在 /var/log/sa/saxx 产生数据   xx代表日期
    可以使用sar -f /var/log/sa/saxx  去访问  加参数就可以访问不同类型的性能数据
    
    		指定查询之前的日期与固定时间点的方法
    
    
    	 sar -u -f /var/log/sa/sa18	--查看这个月已经过的18号的cpu历史数据
    
    	 sar -u -f /var/log/sa/sa18  -s 09:00:00 -e 10:00:00	--指定只看18号9点到10点的cpu历史数据
    
    
    
    保存性能数据
    sar支持保存成两种格式的文件,一种是文本文件,一种是二进制文件 (只有通过sar自己的命令 -f 参数 才能看)
    
    保存为文本文件,可以直接cat命令查看
    sar -p 1 5 > /tmp/test/sar1.txt
    
    保存为二进制文件
    sar -p  1 5  -o /tmp/test/sar2.txt 1>/dev/null    	--会显示到屏幕,可以用1>/dev/null
    file /tmp/test/sar2.txt      --是data类型文件
    sar -f /tmp/test/sar2.txt     --使用-f参数读取  
    
    
    
    可以通过做实验,再来用vmstat,mpstat,sar来看cpu的变化
    
    如:执行下面的sh /tmp/2.sh脚本,产生一百个运算的进程
    [root@li ~]# cat /tmp/1.sh 
    #!/bin/bash
    
    a=1
    sum=0
    while true
    do
    	sum=$[$sum+$a]
    	let a++	
    done
    [root@li ~]# cat /tmp/2.sh 
    #!/bin/bash
    
    
    for i in `seq 100`
    do
    	sh /tmp/1.sh &
    done
    
    =================================================================
    
    
    总结:现在的架构cpu极少会成为瓶颈.就算是真的cpu成为了瓶颈,对cpu能做的优化太少了(要么就换硬件,要么通过扩展架构来分担压力,杀掉无用并且占用资源的进程)
    
    
    系统管理员能改的也就只有进程优先级了
    
    
    nice  优先级    能调的范围是 -20到19 	-20表示优先级最高,19最低
    
    用户运行一个程序默认给的优先级为0
    
    
    renice    对一个已经运行的进程进行nice值的调整
    	renice 19  pid
    
    [root@li ~]# vim /tmp/test.sh 
    
    a=1
    
    while [ $a -lt 1000000 ]
    do
            let a++
    done
    
    
    nice 优先级高的能够优先分配资源,跑得快,花费的时间少,负载越高,效果越明显
    
    实验
    在一个负载高的情况下做效果更好,比如一个大文件的cp
    
    第一个终端:
    [root@li ~]# time sh /tmp/test.sh 
    
    real    0m39.363s
    user    0m26.338s
    sys     0m0.900s
    
    第二个终端:
    [root@li ~]# time nice --19 sh /tmp/test.sh	--19 第一个是参数的横杠,第二个是负号
    
    real    0m26.881s
    user    0m26.008s
    sys     0m0.871s
    
    --对比上面的时间,可以看到 高优先级的花费的时间少
    
    
    可以把上面的实验再做一次,马上用top查出-19的pid值,并使用renice修改
    
    renice 19  9683
    
    
    [root@li ~]# time sh /tmp/test.sh 
    
    real    0m34.665s
    user    0m26.277s
    sys     0m0.896s
    
    [root@li ~]# time nice --19 sh /tmp/test.sh
    real    0m37.231s
    user    0m26.094s
    sys     0m0.905s
    
    
    --从上面的时间可以看出,-19优先级的半路被改为19后,所花费的时间反而多了
    
    
    注意:只有管理员才能把优先级往高调,普通用户只能调自己的,并且只能往低调,调低后还不能再调高
    
    
    ====================================================================
    
    
    展开全文
  • Android系统优化实操总结

    千次阅读 2019-05-20 18:20:59
    Android系统优化内核优化DTS优化内核编译配置优化配置、服务、framework优化编译配置优化native service优化预加载优化字库优化预言优化内存优化 内核优化 DTS优化 内核编译配置优化 配置、服务、framework优化 编译...

    内核优化

    DTS优化

    删除不需要的节点

    内核编译配置优化

    参考《kernel .config优化》 https://blog.csdn.net/mcsbary/article/details/90264591

    配置、服务、framework优化

    native service优化

    开机启动后,查看/目录下的rc文件,确定不需要的服务,然后在源码中删除,再编译系统,验证系统的稳定性和在/目录下的rc文件中确认要删除的服务已不再

    注意: 一些服务和其他模块有关联性,删除一个服务可能需要在其他模块中同步删除对已删除服务的依赖。

    system_server中服务优化
    1. 可以使用属性关闭一些不需要的服务
    config.disable_location=true
    config.disable_searchmanager=true
    config.disable_samplingprof=true
    config.disable_location=true
    
    1. 通过配置feature关闭服务。参考文章:https://blog.csdn.net/mcsbary/article/details/104499750
      注意: 删除system_server中一些服务后,一些原生的apk需要删掉或者需要修改,否则有太多异常。个人认为,异常太多对系统也是一种扰乱,或许得不偿失。
    类预加载优化

    预加载类的作用

    1. 减少内存的占用。当一个类被多个进程使用时,预加载可以共享一份加载,否则每个进程会加载一份
    2. 加速应用的启动。当应用启动时需要的类都已加载内存,app启动会快一些,app需要的类很多时,效果更明显

    因此,预加载优化是一个双刃剑,优化的多了,开机速度会增大,但是会影响一些依赖已删除类的app的启动,且每一个app都会加载一份已删除的类,增加内存占用。

    当我们使用Android开发的产品,仅在特定的场景使用,一些类就不需要加载,如蓝牙等模块。优化预加载衡量好性能的需求。

    步骤如下:

    1. 编辑frameworks/base/preloaded-classes文件,删除不需要预加载的类
    2. 编译代码烧录验证,有些核心类被删除后,系统无法正常启动

    除了直接修改预加载类文件,还可以修改生成预加载类的代码,重新生成预加载类文件

    优秀博客:https://blog.csdn.net/u014029448/article/details/81129382

    资源预加载优化

    类和资源预加载优化:https://blog.csdn.net/jinron10/article/details/89315392
    android启动速度优化:https://blog.csdn.net/chenyong19870904/article/details/12912093
    Android开机速度优化简单回顾:https://blog.csdn.net/freshui/article/details/53700771

    一个开源项目:
    https://gitee.com/luckybilly/PreLoader

    字库优化

    参考《内存优化–减少字库缓存》https://blog.csdn.net/mcsbary/article/details/89363082

    内存优化

    预加载优化

    预加载优化和内存优化存在一定的冲突,选在了快速启动,开机后进程加载的资源就会多份。需要合理衡量需求。

    应用合理布局

    合理设计布局和严格按照分辨率设计图片。

    防止内存泄漏

    java层:不合理引用导致内存泄漏
    C++层:分配内存没有释放

    这是比较常见的两种内存泄漏,都可以通过煲机,分析PSS、RSS等分析出来内存是否泄漏。在长时间,大数据下,一点泄漏会被放大。

    使用内存压缩

    内存压缩,增加了内存的使用率,但是一定成都上增加了kernel的负载,在cpu资源方面的占用会有一定成都的增加,如果cpu性能不是特别强劲,会影响运行性能,影响体验感。

    该策略或许可以在高性能cpu配低内存情况下使用,不影响性能,还可以节省内存。
    关闭内存压缩

    1. 删除分区表中压缩缓存分区
    2. 关闭kernel中ZRAM配置
    使用Android ION分配内存

    在Android 7.1已使用,在kernel中关闭ION,开机系统会起不来

    关闭jit

    在Android运行时,jit会对运行性能,根据实际运行情况,做一些优化。关闭git在一定成都上节省内存,在性能不强劲的cpu下,性能会有很大影响

    build/target/product/runtime_libart.mk:60:    dalvik.vm.usejit=false \
    build/target/product/runtime_libart.mk:61:    dalvik.vm.usejitprofiles=false \
    
    配置系统使用low_mem

    配置系统属性使用low_mem,会关闭系统一些feature

    ro.config.low_ram=true
    
    定时释放kernel缓存

    linux 临时释放缓存:https://blog.csdn.net/killvoon/article/details/73557939
    该策略,在释放缓存的瞬间,对系统性能有一定的影响,若影响有限,可以接受;谨慎使用
    脚本资源:https://download.csdn.net/download/mcsbary/12200703

    lowMemKiller

    打开kernel的lowMemKiller机制

    Android lmkd:https://blog.csdn.net/mcsbary/article/details/89323232


    实测

    曾经做裁剪的测试记录,按照现在深入的理解,有一些不准确,参考还是可以的。
    在这里插入图片描述

    展开全文
  • windows简单命令系统优化

    千次阅读 2019-07-08 15:23:53
    windows简单命令系统优化 windows简单命令系统优化 一、Gpt转mbr: 打开cmd命令 看正在挂载的磁盘 C:\Users\Administrator>diskpart 查看正在挂载磁盘列表 DISKPART> list disk 1.选择将要转换的硬盘 DISKPART...
  • 排队论及排队系统优化

    万次阅读 多人点赞 2017-08-14 23:29:25
    排队系统优化分析;排队论发源于上世纪初。 当时美国贝尔电话公司发明了自动电话,以适应日益繁忙的工商业电话通讯需要。这个新发明带来了一个新问题,即通话线路与电话用户呼叫的数量关系应如何妥善解决,这个问题...
  • 电脑系统优化清理工具CCleaner

    千次阅读 2020-04-18 13:56:44
    定期的一下系统垃圾清理成为每个电脑用户的必备工作,今天就给大家推荐一款国外优秀的系统优化和隐私保护的工具。 CCleaner是一款国外优秀的系统优化和隐私保护工具。CCleaner的主要用来清除Windows系统不再使用...
  • 嵌入式Linux系统优化的那些事儿

    千次阅读 2017-08-22 15:38:36
    % \today从今天开始我们来扯一扯嵌入式Linux系统优化的那些事儿。。什么是嵌入式?官方解释请自行Google Or Wikipedia。嵌入式Linux ?嵌入式Linux 是嵌入式系统中比较主流的一种,其以Linux 为嵌入式设备的操作系统...
  • 大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 知乎专栏:https://zhuanlan.zhihu.com/youhua  全网私活,免费订阅: http://www.zsihuo.com 在这里我会从基于J2EE系统及互联网架构方面,来谈谈系统优化...
  • 美团团购订单系统优化

    千次阅读 2018-02-23 23:27:44
    美团团购订单系统优化记团购订单系统简介美团团购订单系统主要作用是支撑美团的团购业务,为上亿美团用户购买、消费提供服务保障。2015年初时,日订单量约400万~500万,同年七夕订单量达到800万。目标作为线上S级...
  • 系统优化方法与智能优化算法

    千次阅读 2009-11-02 18:26:00
    系统优化方法与智能优化算法系统优化方法在各种工程系统、经济系统,乃至社会系统中得到了广泛的应用。最优化理论的研究也一直是一个十分活跃的领域,出版了许多最优化理论、方法和应用的著作和译作。梯度为基础的...
  • Windows系统优化(个人整理)

    千次阅读 2017-07-10 16:48:43
    Windows系统优化,提升电脑运行速度(个人整理)
  • 在我上一篇博客《oracle性能优化二——操作系统优化》中介绍了如何操作系统优化,本文将介绍如何使用toad监控数据库的优化。  通过合理的分配内存大小,合理的设置表空间体系和内部空间参数。可以提高磁盘空间的...
  • 系统优化法则

    千次阅读 2010-11-13 19:05:00
    系统优化法则 1)对齐法则 存取一个字长的数据与一个字节的数据那个耗时更短? c/c++程序员都知道有一个对齐原则,在32位的cpu中,要四字节对齐,为什么呢?因为在大多数32位的cpu中,与存取一个字长的数据相比,存取...
  • 在Windows上有各种安全卫士、系统助手等系统优化和清理工具,比如360安全卫士、腾讯安全管家等,同样MacOS系统也有很多好用的系统优化清理工具,体验比Windows更好,今天和大家推荐10款Mac上优秀的系统优化清理工具...
  • Pro Tools系统优化- Windows篇

    千次阅读 2018-04-08 19:25:57
    Windows Vista和XP系统优化请参考http://avid.force.com/pkb/articles/en_US/Troubleshooting/en367983 升级显卡驱动显卡的驱动会影响对GPU显存的有效利用,从而影响电脑主机CPU处理器的效率,减少P...
  • 云计算之linux系统优化(上)

    千次阅读 2019-01-05 10:18:48
    众所周知,linux操作系统的调优越来越受到重视...按照我的思路,linux系统优化分为两个方向:linux安全和性能调优 方向一:linux安全 1.关闭selinux sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/sel...
  • 博客系统优化升级公告

    万次阅读 多人点赞 2016-07-15 17:52:44
    为了给您提供更加优质、高效、稳定的服务,我们将于近期陆续对博客系统和页面进行改版优化升级。由此给您带来的不便,我们深表歉意。敬请谅解~ 届时,博客新首页和专栏将以全新的面貌与广大用户见面,我们必将带给...
  • Android系统优化

    千次阅读 2019-02-14 16:01:31
    相机的文件访问权限 在application下接入 &lt;!--解决7.0照相机崩溃问题 --&gt; &lt;provider android:name="android.support.v4.content.FileProvider" android:authorities="... ...
  • 【VB】学生信息管理系统优化总结

    千次阅读 热门讨论 2015-06-17 10:48:13
    学生信息管理系统优化
  • Java秒杀系统优化的工程要点

    千次阅读 多人点赞 2019-06-11 21:24:52
    这篇博客是笔者学习慕课网若鱼老师的《Java秒杀系统方案优化 高性能高并发实战》课程的学习笔记。若鱼老师授课循循善诱,讲解由浅入深,欢迎大家支持。 本文记录课程中的注意点,方便以后code review。此外,本文将...
  • 标签:XenDesktop Citrix 性能测试 操作系统优化 Loginvsi vmware view vsphere 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。...
  • 美团团购订单系统优化实践

    千人学习 2017-03-25 17:23:20
    在新的2017年春天,SDCC 2017之线上互联网应用架构峰会再次启航,将于2017年3月25日隆重开启,邀请了百度、微博、58同城、当当网、美团点评等一线互联网公司的技术总监、架构师、技术经理等,一同讨论高可用系统、...
  • 关于Unity粒子系统优化,你可能遇到这些问题汇总。
  •  针对系统执行过程中的作业,参考开源系统与研究论文可以看到大家比较关注的一些优化方向:1. 存储层:列存储和文件排布:Major Technical Advancements in Apache Hive压缩:Choosing a Data Compression Form...
  • 桔妹导读:Ceph是国际知名的开源分布式存储系统,在工业界和学术界都有着重要的影响。Ceph的架构和算法设计发表在国际系统领域顶级会议OSDI、SOSP、SC等上。Ceph社区得到Red...
  • 系统优化的基本思想点

    千次阅读 2020-07-09 14:30:55
    在尝试对一个系统进行优化的时候,一般分为两个创造性步骤,一个是在脑海中进行构思并创造出思维蓝图,第二个创造在于将蓝图付诸于实践,这里将提供一些第一步中构思蓝图应该考虑的,或者说是应该如何进行思考提供...
  • Windows 10 一键优化辅助工具,右键 “以管理员身份运行” 就可以了 。 下载地址:https://474b.com/file/24162793-478705731 优化列表如下: 01、禁用索引服务 02、禁止window发送错误报告 03、禁用"最近使用...
  • 一、每秒几十万并发的系统优化JVM Kafka类似的支撑高并发消息系统大家肯定不陌生,对于Kafka来说,每秒处理几万甚至几十万消息时很正常的。 一般来说部署Kafka需要用大内存机器( 比如64G ),也就是说可以给年轻代...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 139,789
精华内容 55,915
关键字:

系统优化