程序员linux学习

日常工作-优化

2019-03-17  本文已影响5人  高多金

一、系统优化

1、文件描述符:ulimit -a

/etc/systemd/system.conf

/etc/systemd/user.conf

DefaultLimitNOFILE=65535

DefaultLimitNPROC=65535

二、apache优化

APACHE多道处理模式(MPM):prefork、worker、event

/etc/httpd/conf.modules.d/00-mpm.conf

LoadModule mpm_event_module modules/mod_mpm_event.so

三、nginx优化

1、网络IO事件模型:use epoll;

2、进程数量及 CPU绑定

#将work process绑定到特定cpu上,避免进程在cpu间切换的开销

worker_cpu_affinity 0001 0010 0100 1000

#4内核8进程时的设置方法:worker_cpu_affinity 00000001 00000010 00000100 10000000

3、隐藏软件名及版本信息:http{ server_tokens off;}

4、日志:

日志切割\轮询

不记录不需要的日志:

location /nginx-status

    {

        stub_status on;

        access_log off;

            }

访问量

PV:点击量

UV:客户量

访问日志的权限设置:

chown -R root.root /app/logs

chmod -R 600 /app/logs

5、NGINX 防止DOS/DDOS攻击

限制用户并发连接数:

http{ limit_conn_zone $binary_remote_addr zone=perip_conn:10m; }

ngx_http_limit_conn_module:调用limit_conn模块

$binary_remote_addr: 二进制远程地址

zone=perip_conn:10m:定义zone名字叫perip_conn,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话。

location{ limit_conn perip_conn 1;}

限制用户连接速率:

http{limit_req_zone $binary_remote_addr zone=reqrate:20m rate=10r/s; }

limit_req_zone:调用limit_req模块

rate=10r/s:频率为每秒10个请求

location{ limit_req  zone=reqrate burst=5; }

burst=5:允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。

四、mysql优化

1、/etc/my.cnf

innodb_buffer_pool_size:配置innodb缓冲池的大小,如果数据库中只有innodb表,则推荐配置量为总内存的75%

innodb_flush_log_at_trx_commit:默认值为1,一般建议为2 ,如果数据安全性比较高则使用默认值1

0: 每秒同步,并执行磁盘flush操作;

1:每事务同步,并执行磁盘flush操作;

2: 每事务同步,但不执行磁盘flush操作;

innodb_file_per_table:innodb每一个表使用独立的表空间,默认为off,建议改为on ,使用独立的表空间,

2、慢查询优化:

show status; ?// 查询mysql数据库的一些运行状态

show status like 'uptime'; // 查看mysql数据库启动多长时间,myisam存储引擎长时间启动需要进行碎片整理

查看慢查询:show status like 'slow_queries';

查询慢查询时间:show variables like 'long_query_time';

设置慢查询时间:set long_query_time = 0.5;

3、安全优化:

(1)修改密码

修改配置文件,在[mysqld]增加skip-grant-tables

重启mysql服务:service mysqld restart

登录数据库:mysql –u root –p

修改密码:update mysql.user  setpassword=password('newpassword') where user='root';

(2)修改root用户口令,删除空口令、删除默认数据库和数据库用户:mysql_secure_installation

(3)改变默认mysql管理员帐号

mysql>update user set user="newroot" where user="root"; //改成不易被猜测的用户名

mysql>flush privileges;

(4)限制连接用户的数量: /etc/my.cnf  max_user_connections 2

(5)禁止MySQL对本地文件存取:/etc/my.cnf    local-infile=0

上一篇下一篇

猜你喜欢

热点阅读