运行环境为centos7,tomcat和mysql的优化方式,经验总结

一般在服务的cpu占用很高时,

1.使用ps -mp pid -o THREAD,tid,time命令查看该进程的线程情况,可以列举出占用高的线程,挑选个占用高的线程的tid,eg:挑选TID为14065的线程,查看该线程的堆栈情况,先将线程id转为16进制,使用printf "%x\n" tid命令进行转换(

printf "%x\n" 14065

)

再使用jstack命令打印线程堆栈信息,命令格式:jstack pid |grep tid -A 30(pid:进程id,tid:转换后的线程id的16进制),可以打印出堆栈信息,在堆栈信息中查看问题所在。

2.也可以使用jstack命令查看进程的堆栈情况

jstack 14063 >>jstack.out

3.若定位出的信息只是gc问题这类的,没有定位到问题代码,那么就在服务器的配置上进行下手优化,如果定位到是GC线程占用cpu高导致进程的占用高,可以尝试配置jvm的内存占用初始值和最大值,eg:JAVA_OPTS="-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m",如果是优化tomcat的jvm,则可以在不影响服务器中其他程序运行的情况下,可以将tomcat的jvm尝试配置为服务器屋里内存的一半,在配置完成重启后使用top查看当前tomcat的进程的%mem是在不断增长的,但是增长到大概接近配置值后就不回再继续增长了。

4.优化tomcat:配置tomcat的最大连接数,配置连接池。配置协议为nio协议,并发会比默认的bio好些:

protocol="org.apache.coyote.http11.Http11NioProtocol"
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="2000" minSpareThreads="200"/>
<Connector port="1881" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
			    URIEncoding="UTF-8"
               redirectPort="8443"
			   />

5.关系tomcat的日志:server.xml中

 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

注释掉,这个配置是输出localhost日志的

,还有在catalina.sh文件中可以配置输出/dev/null

if [ -z "$CATALINA_OUT" ] ; then
  #CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
	CATALINA_OUT=/dev/null
fi

这样就不输出catalina的日志了。

6.mysql优化:修改mysql的最大连接数,可以在my.cnf中配置,这样配置在重启后不需要重新配置,也可以用语句配置set max_connections,这样配置每次重启后需要重新配置。

如果mysql的cpu占用很高的话,可以尝试优化wait_timeout的时间,默认是28800,如果在多个连接时,可能会无法释放等待的连接,但是配置释放时间时要记得将项目中配置的数据库连接池中的相关参数也进行配置

 <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->
            <property name="removeAbandonedTimeout" value="150"/>

            <!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->
            <property name="maxWait" value="3000"/>

否则代码进行连接后也无法对等待连接进行释放。

7.优化linux系统的time_wait连接的回收时间,

通过调整内核参数解决
   vi /etc/sysctl.conf
编辑文件,加入以下内容:
   net.ipv4.tcp_syncookies = 1
   net.ipv4.tcp_tw_reuse = 1
   net.ipv4.tcp_tw_recycle = 1
   net.ipv4.tcp_fin_timeout = 30
然后执行/sbin/sysctl -p让参数生效。
 
net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout修改系統默认的TIMEOUT时间。

8.放开ulimit -n的值,系统默认打开文件数是1024,设置成ulimit -n 65535,这样可以增大系统可以被连接的数量

时间: 2024-07-29 23:48:36

运行环境为centos7,tomcat和mysql的优化方式,经验总结的相关文章

Linux服务器运行环境搭建(三)——MySQL数据库安装

官网:http://www.mysql.com/ 官网下载地址:http://dev.mysql.com/downloads/mysql/ 说明:官网下载页面的“Select Platform” 选择平台选项点击无效,是因为其调用了google网站的jquery插件(http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js),而google被中国大陆屏蔽,因此点击无效,如需使用请FanQiang. 在此提供下Lin

?二十种实战调优MySQL性能优化的经验

?http://www.searchdatabase.com.cn/showcontent_58391.htm [为查询缓存优化你的查询] 像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的.所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存. [EXPLAIN 你的 SELECT 查询] 使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的. [当只要一行数据时使用 LIMIT 1] 当

PHP - CentOS下开发运行环境搭建(Apache+PHP+MySQL+FTP)

本文介绍如何在 Linux下搭建一个 PHP 环境.其中 Linux 系统使用是 CentOS 7.3,部署在阿里云服务器上. 1,连接登录服务器 拿到服务器的 ip.初始密码以后.我们先通过远程连接工具 putty 连接服务器主机. 2,安装Apache (1)执行如下命令进行安装 1 yum -y install httpd (2)开启 apache 服务 1 systemctl start httpd.service (3)设置 apache 服务开机启动 1 systemctl enab

部署web测试环境 jdk,tomcat,mysql

安装JDK(rpm) 1.将rpm包上传到服务器 ? 首先要到Oracle官网下载jdk的rpm包,或者直接使用yum安装jdk: ? yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel 2.安装java ? 在上传目录下,使用命令安装: ? rpm -ivh xxx.rpm 3.配置环境变量 ? 首先,可以使用命令查询一下jdk的位置: ? find / -name jdk* ? 然后,输入命令: ? vi /etc/profile

mysql数据优化方式

1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小. 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了.同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段. 另外一个提高效率的方法

Jsp运行环境——Tomcat

JSP JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1] 是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动态网页技术标准.JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp). 用JSP开发的Web应用是跨平台的,既能在Linux下

Ubuntu部署python3.5的开发和运行环境

Ubuntu部署python3.5的开发和运行环境 概述 下载 解压 安装 建立虚拟环境 安装pip 常见问题-HTTPS错误提示 Ubuntu部署python3.5的开发和运行环境 概述 由于最近项目全部由python2.x转向 python3.x(使用目前最新的 python3.5.1) ,之前的云主机的的默认python版本都面临升级,故进行了升级后将相应的步骤记录下来,作为学习笔记吧. 服务器运行环境: ubuntu 14 LTS Server 本安装方式具有如下特点: 不影响已经有的p

Deepin部署python3.5的开发和运行环境

1.概述 由于最近项目全部由python2.x转向 python3.x(使用目前最新的 python3.5.1) ,之前的云主机的的默认python版本都面临升级,故进行了升级后将相应的步骤记录下来: 服务器运行环境:Deepin 15.41: 本安装方式具有如下特点:不影响已经有的python环境.增量式安装.完全隔离的沙盒环境.甚至可以不需要root权限: 2.下载 在python官网下载指定平台下的python3.5的环境:https://www.python.org/downloads/

MySQL数据库优化之一配置文件

服务器物理硬件的优化 在挑选硬件服务器时,我们应该从下面几个方面着重对MySQL服务器的硬件配置进行优化,也就是说将项目中的资金着重投入到如下几处: 1.磁盘寻道能力(磁盘I/O),我们现在用的都是SAS15000转的硬盘,用6快这样的硬盘作RAID1+0.MySQL每一秒钟都在进行大量.复杂的查询操作,对磁盘的读写量可想而知,所以,通常认为磁盘I/O是约制MySQL性能的最大因素之一.对于日均访问量在100万PV以上的论坛(Discuz).博客(Wordpress),如果性能不好,造成的直接后