Linux高并发系统参数优化

Posted on

终于毕业证书到手,学生生涯也算是划上完美的句号了。不过工作强度还真的有点大,还经常加班。感觉自己懒散了许多,人果然是生于忧患,死于安乐。。。最近的项目里对业务处理的高并发要求比较高,因此也学习了相关的如何调整Linux内核参数让服务器可以处理非常高并发的业务。所以在博客上记录下相关的经验,以供参考。 修改的参数主要是Linux系统参数和网络协议栈参数。注意,以下命令都需要在root环境下运行。

Linux操作系统参数

系统全局允许分配的最大文件句柄数:

    # sysctl -w fs.file-max=2097152
    # sysctl -w fs.nr_open=2097152

允许当前会话/进程打开文件句柄数:

    # ulimit -n 1048576

但是以上命令只是临时修改,重启系统便会失效,所以我们需要持久化这些参数。

持久化’fs.file-max’设置到/etc/sysctl.conf文件:

    fs.file-max = 1048576

/etc/security/limits.conf持久化设置允许用户/进程打开文件句柄数:

    *      soft   nofile      1048576
    *      hard   nofile      1048576

TCP协议栈网络参数

并发连接backlog(定义了网络连接的队列的最大长度)设置:

    # sysctl -w net.core.somaxconn=32768
    # sysctl -w net.ipv4.tcp_max_syn_backlog=16384
    # sysctl -w net.core.netdev_max_backlog=16384

可用知名端口范围:

    # sysctl -w net.ipv4.ip_local_port_range='1000 65535'

TCP Socket读写Buffer设置:

    # sysctl -w net.core.rmem_default=262144
    # sysctl -w net.core.wmem_default=262144
    # sysctl -w net.core.rmem_max=16777216
    # sysctl -w net.core.wmem_max=16777216
    # sysctl -w net.core.optmem_max=16777216

    # sysctl -w net.ipv4.tcp_rmem='1024 4096 16777216'
    # sysctl -w net.ipv4.tcp_wmem='1024 4096 16777216'

TCP连接追踪设置:

    # sysctl -w net.nf_conntrack_max=1000000
    # sysctl -w net.netfilter.nf_conntrack_max=1000000
    # sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30

TIME-WAIT Socket最大数量、回收与重用设置:

    # net.ipv4.tcp_max_tw_buckets=1048576

FIN-WAIT-2 Socket超时设置:

    # net.ipv4.tcp_fin_timeout = 15

参考

测试调优

tagged: Linux

使用Latex书写论文

Posted on

最近忙着写论文,博客都快要长草了。。。但是我还是要坚持写下去!因为早就知道写论文排版会很麻烦,所以就选择了使用Latex来写论文。看到后期同学们在Word上一句一句的调整格式,我只能说学会了Latex真是磨刀不误砍柴工,后期真是太省心了,接下来就向大家介绍下如何使用Latex写论文,免除排版之忧。

Latex安装

推荐使用Tex Live来编写论文,从国内中科大的镜像源来下载每个平台对应的安装文件,Windows平台下载exe程序,Linux的各大发行版建议从官方镜像源下载。安装过程记住要首先选择国内的镜像源,根据网速来决定安装进度,基本上要安装很久,请耐心等待。

编辑器选择

Latex的主要功能是把tex文件编译成pdf文件,所以自带的编辑功能很难用。在此我推荐使用Sublime Text 2来编写论文,可以一键编译非常方便。安装好Sublime Text 2之后,我们还要安装相应的插件来配合Latex的使用,插件的启用请参考我之前的博文。在这里我们选择使用LaTeXTools来编译论文,虽然Github上有详细的配置说明,我还是简要介绍下,主要配置的就是Latex所对应的环境变量texpath。还可以配置默认的PDF阅读器进行反向搜索,Win下使用SumatraPDF,Linux使用Evince。配置完毕之后我们只需要在当前tex页面按下Ctrl+B 就可以一键编译成pdf文件。

Latex格式学习

网上有很多Latex的学习资料,不过我们也没必要详细学习,在此介绍一个简单的学习资料。一份不太简短的LATEX介绍基本上看完这个文档就可以大致明白如何利用Latex书写论文。

Latex模板

当然,我们也没必要一定要系统的学习,如果别人有做好现成的模板,我们直接套用就好,非常方便,中科大也有热心的小伙伴制作了模板。地址是USTC Thesis。近期抽时间的话,我会制作一个软件学院专用的论文模板。

相关学习资料

如何使用LaTeX排版论文

配置LaTEXTools

tagged: Latex

模块化JavaScript开发

Posted on

前端开发的节奏真是日新月异。。。短短几年竟然发展如此迅速,JavaScript的各种框架库可以说比其他语言的总和还多。Google家的AngularJS,和Facebook的React各领风骚。自己写的前端项目也越来越复杂, 单纯的面向过程开发和单文件已经不能满足现有的需求。虽然ES6早就引入模块化特性,但是目前的浏览器还没有实现。还需要借助其它前端工具进行编译。。。下面我就顺便介绍下Web开发的历史。。。

Server Rendered

以前开发Web项目,全部是服务器来渲染页面,从数据库读入数据,浏览器只负责解释页面,这种情况下不考虑交互性,其实完全不用写任何Js代码。但是缺点也很大,处理全部交给服务器,服务器压力大。而且每次都是刷新加载,所以用户体验也不是很好。

Server-Rendered + AJAX

后来使用AJAX无刷新技术,对于简单的登录交互我们没有必要刷新页面,而是直接使用Js发送认证数据进行交互和登录。一定程度上减少了服务器的压力。

Single Page App

后来出现了谷歌的AngularJS这样的富客户端Js框架,做到了真正的页面和数据分离。全部使用JavaScript进行页面的渲染和交互,只向服务器请求必要的数据,并使用JSON的数据格式来传输。这样不仅有利于减少服务器压力,而且还可以复用到各种平台。但是JavaScript代码变得越来越多和复杂,必须考虑合适的架构和模块化开发才有利于之后的维护。

Webpack模块化工具

webpack模块化工具可以把你写的符合模块化规范的代码进行打包和整合到一个单子文件,这样就可以模块化自己的项目。但是官方文档实在是很难学习,自己琢磨了一段时间才算稍微能上手。并且还遇到点小问题,在此记录下,我们可以使用命令$ npm install webpack -g 安装webpack.但是我们使用的时候经常还是遇到找不到webpack的问题,是因为缺少环境变量NODE_PATH 可以通过设置export NODE_PATH="/usr/lib/node_modules来解决。

相关学习资料

webpack指南

webpack-howto

tagged: JavaScript