2017-01-24 14:10:41 u011411069 阅读数 2493
  • 阿里云ECS Linux服务器项目部署实战视频课程

    本套课程建立在阿里云linux(centos6.5) 具体内容如下: 1,购买云主机&安装上传工具 2,安装nginx 3,绑定域名(域名备案,虚拟主机绑定等) 4,安装mysql(设定开机启动,环境变量,更改连接密码等) 5,安装php 6,配置nginx识别php 7,安装thinkcmf完成pathinfo模式&伪静态模式的nginx设置 8,安装phpmyadmin&ftp;服务

    7260 人正在学习 去看看 吴华

原理很简单,tomcat启动前会先执行bin目录下的setenv.sh脚本(默认不存在,需手动创建),在脚本中获取服务器内存进行动态分配即可

#!/usr/bin/env bash
MEM_SIZE="1" #默认1G
function get_mem_k_size_func(){
    local _memSize="$(vmstat -s -S K | awk 'NR==1{print $1}')"
    echo "${_memSize}"
}


function get_mem_m_size_func(){
    local _memSize="$(vmstat -s -S M | awk 'NR==1{print $1}')"
    echo "${_memSize}"
}

function get_mem_g_size_func(){
    local _memSize=$(($(get_mem_m_size_func)/1024))
    echo "${_memSize}"
}

echo "[TOMCAT] TBM_HOME=$TBM_HOME"
echo "[TOMCAT] runmode=$runmode"
AVI_MEM_SIZE=$(get_mem_g_size_func)
if [ ${AVI_MEM_SIZE} -gt 7 ]; then #大于7G内存设置为4G
	MEM_SIZE="4"
elif [ ${AVI_MEM_SIZE} -gt 4 ]; then #大于4G内存设置为2G
        MEM_SIZE="2"
fi
export JAVA_OPTS="-server -Xms512m -Xmx${MEM_SIZE}g -Xss256k -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseG1GC -Dcom.sun.management.jmxremote.port=9089 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -DCmdbType=tbm"


2015-11-03 10:39:17 iteye_16982 阅读数 87
  • 阿里云ECS Linux服务器项目部署实战视频课程

    本套课程建立在阿里云linux(centos6.5) 具体内容如下: 1,购买云主机&安装上传工具 2,安装nginx 3,绑定域名(域名备案,虚拟主机绑定等) 4,安装mysql(设定开机启动,环境变量,更改连接密码等) 5,安装php 6,配置nginx识别php 7,安装thinkcmf完成pathinfo模式&伪静态模式的nginx设置 8,安装phpmyadmin&ftp;服务

    7260 人正在学习 去看看 吴华

由于LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以增加文件以及的读写速度。但在有些时候,如果物理内存全被使用了,有突发性物理内存消耗时就会有性能问题,如mysql数据库服务器。

 

先说下free命令怎么看内存

[root@tangj proc]# free
total used free shared buffers cached
Mem: 515588 295452 220136 0 2060 64040
-/+ buffers/cache: 229352 286236
Swap: 682720 112 682608

其中第一行用全局角度描述系统使用的内存状况:

total——总物理内存

used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存

free——完全未被使用的内存

shared——应用程序共享内存

buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)

cached——缓存,用于已打开的文件

 

note:

total=used+free

used=buffers+cached (maybe add shared also)

 

第二行描述应用程序的内存使用:

前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值

后个值表示+buffers/cache——所有可供应用程序使用的内存大小,free加上缓存值

note:

-buffers/cache=used-buffers-cached

+buffers/cache=free+buffers+cached

 

第三行表示swap的使用:

used——已使用

free——未使用

说明,释放前最好sync一下,防止丢数据。

 

cache内存释放(运行一次只是暂时回收,可以用crontal来定期执行 sync 和 相应的清理语句自动清理,以下操作在kernel 2.6.16以上的内核有效):

To free pagecache:
echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

说明,切记释放前最好sync一下,防止丢数据。

 

修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加

vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3

上面的设置比较粗暴,使cache的作用基本无法发挥。需要根据机器的状况进行适当的调节寻找最佳的折衷。

 

/proc/sys/vm/dirty_ratio

这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数 据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是 10。设1加速程序速度

 

/proc/sys/vm/dirty_background_ratio

这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时 候,pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时, 应该降低其数值,一般启动上缺省是 5

 

/proc/sys/vm/dirty_writeback_centisecs

这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操

 

/proc/sys/vm/dirty_expire_centisecs

这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。建议设置为 1500,也就是15秒算旧。 

/proc/sys/vm/drop_caches

释放已经使用的cache

/proc/sys/vm/page-cluster

该文件表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。

/proc/sys/vm/swapiness

该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。

/proc/sys/vm/vfs_cache_pressure

该文件表示内核回收用于directory和inode cache内存的倾向

 

/etc/sysctl.conf
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=1
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swapiness=100
vm.vfs_cache_pressure=133

vm.dirty_ratio = 5    #dft 20  %
vm.dirty_background_ratio =5 #dft 10 %
vm.dirty_writeback_centisecs=100 #dft 500 is 5s
vm.dirty_expire_centisecs=300    #dft 30000 is 30s
vm.drop_caches=3  #dft  0
vm.swappiness=100  #dft 60
vm.vfs_cache_pressure=133  #dft 100

vm.min_free_kbytes=204800

#200M mem

save simple sysctl -w net.ipv4.route.flush=1

 

 

2017-09-08 14:52:03 CLA1989 阅读数 283
  • 阿里云ECS Linux服务器项目部署实战视频课程

    本套课程建立在阿里云linux(centos6.5) 具体内容如下: 1,购买云主机&安装上传工具 2,安装nginx 3,绑定域名(域名备案,虚拟主机绑定等) 4,安装mysql(设定开机启动,环境变量,更改连接密码等) 5,安装php 6,配置nginx识别php 7,安装thinkcmf完成pathinfo模式&伪静态模式的nginx设置 8,安装phpmyadmin&ftp;服务

    7260 人正在学习 去看看 吴华

一、常见的Java内存溢出有以下三种:

1. java.lang.OutOfMemoryError: Java heap space 即JVM Heap溢出

解释说明:JVM在启动的时候会自动设置JVM Heap的值,JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。其初始空间默认是物理内存的1/64,最大空间不可超过物理内存。JVM提供-Xmn -Xms -Xmx等选项来进行设置。

出错场景:在JVM中,如果98%的时间是用于GC,且可用的Heap size不足2%时,将会出现JVM Heap溢出

解决方法:修改JVM Heap的大小。

2. java.lang.OutOfMemoryError: PermGen space 即PermGen space溢出

解释说明:PermGen space是指内存的永久保存区域。这个区域主要存放Class和Meta信息,Class在被Load时就会被放入PermGen space。

出错场景:如果APP载入很多CLASS,就可能会出现PermGen space溢出。(因为sun的GC不会在程序运行时对PermGen space进行清理)常见于web服务器对JSP进行pre compile的时候

解决方法:修改MaxPermSize大小

3. java.lang.StackOverflowError 即栈溢出

解释说明:JVM采用的是栈式的虚拟机,函数的调用过程都体现在堆栈和退栈上。

出错场景:通常栈的大小是1-2MB的,如果调用构造函数的 “层”太多,则会出现栈溢出

解决方法:修改程序

二、Tomcat的JVM内存溢出解决方法
在生产环境中,tomcat内存设置不好很容易出现JVM内存溢,解决方法就是修改Tomcat中的catalina.sh文件。

在catalina.sh文件中,找到cygwin=false,在这一行的前面加入参数,具体如下

# vi TOMCAT_HOME/bin/catalina.sh
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"

其他说明:
1.“m”说明单位是MB,否则默认是KB
2.一般使用物理内存的80%作为堆大小
3.一般把-Xms和-Xmx设为一样大
4.一般把-Xmn设置为-Xmx值的1/4
5.一般将堆的总大小的50%到60%分配给新生成的池

三、jvm参数说明:
-server 一定要作为第一个参数,启用JDK的server版本,在多个CPU时性能佳
-Xms java Heap初始大小。 默认是物理内存的1/64。
-Xmx java heap最大值。建议均设为物理内存的80%。不可超过物理内存。
-Xmn java heap最小值,一般设置为Xmx的3、4分之一。
-XX:PermSize 设定内存的永久保存区初始大小,缺省值为64M。
-XX:MaxPermSize 设定内存的永久保存区最大大小,缺省值为64M。
-XX:SurvivorRatio=2 生还者池的大小,默认是2。如
-XX:NewSize 新生成的池的初始大小。 缺省值为2M。
-XX:MaxNewSize 新生成的池的最大大小。 缺省值为32M。
+XX:AggressiveHeap 让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
-Xss 每个线程的Stack大小
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-XX:+UseParNewGC 缩短minor收集的时间
-XX:+UseConcMarkSweepGC 缩短major收集的时间
-XX:userParNewGC 可用来设置并行收集(多CPU)
-XX:ParallelGCThreads 可用来增加并行度(多CPU)
-XX:UseParallelGC 设置后可以使用并行清除收集器(多CPU)


2011-01-21 09:52:03 jianan1987411 阅读数 36
  • 阿里云ECS Linux服务器项目部署实战视频课程

    本套课程建立在阿里云linux(centos6.5) 具体内容如下: 1,购买云主机&安装上传工具 2,安装nginx 3,绑定域名(域名备案,虚拟主机绑定等) 4,安装mysql(设定开机启动,环境变量,更改连接密码等) 5,安装php 6,配置nginx识别php 7,安装thinkcmf完成pathinfo模式&伪静态模式的nginx设置 8,安装phpmyadmin&ftp;服务

    7260 人正在学习 去看看 吴华
# Bugzilla 37848: only output this if we have a TTY
if [ $have_tty -eq 1 ]; then
echo "Using CATALINA_BASE: $CATALINA_BASE"
echo "Using CATALINA_HOME: $CATALINA_HOME"
echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"

CATALINA_OPTS="$CATALINA_OPTS -Xms512m -Xmx1024m $JPDA_OPTS"
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
echo "Using CATALINA_OPTS:$CATALINA_OPTS"
echo "Using JAVA_OPTS:$JAVA_OPTS"
2009-09-12 18:23:01 elf8848 阅读数 462
  • 阿里云ECS Linux服务器项目部署实战视频课程

    本套课程建立在阿里云linux(centos6.5) 具体内容如下: 1,购买云主机&安装上传工具 2,安装nginx 3,绑定域名(域名备案,虚拟主机绑定等) 4,安装mysql(设定开机启动,环境变量,更改连接密码等) 5,安装php 6,配置nginx识别php 7,安装thinkcmf完成pathinfo模式&伪静态模式的nginx设置 8,安装phpmyadmin&ftp;服务

    7260 人正在学习 去看看 吴华

常见的内存溢出有以下两种:

java.lang.OutOfMemoryError: PermGen space

java.lang.OutOfMemoryError: Java heap space


一、java.lang.OutOfMemoryError: PermGen space

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,
这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小
超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

 

二、java.lang.OutOfMemoryError: Java heap space
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,
其初始空间(即-Xms)是物理内存的1/64 ,最大空间(-Xmx)是物理内存的1/4 。可以利用JVM提供的-Xmn -Xms -Xmx等选项可
进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
解决方法:手动设置Heap size

 

 

----------------------Linux下修改TomcatJVM内存大小----------------------

要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,红色的为新添加的.

# OS specific support.  $var _must_ be set to either true or false.
JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
cygwin=false

 

----------------------windows下修改Tomcat JVM内存大小----------------------

情况一:解压版本的Tomcat , 要通过startup.bat启动tomcat才能加载配置

要添加在tomcat 的bin 下catalina.bat 里

rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%后面添加,红色的为新添加的.

set JAVA_OPTS=-Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true

 

情况二:安装版的Tomcat ,没有catalina.bat

 

安装版的Tomcat下没有catalina.bat
如果tomcat 6 注册成了windows服务,或者windows2003下用tomcat的安装版,
在/bin/tomcat6w.exe里修改就可以了 。

如果tomcat 5, windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
加入 -Xms300m -Xmx350m
重起tomcat服务,设置生效

---------------------------------------------------------
各参数的比例:
Xmx 与PermSize的和不可超过JVM可获得的总内存
PermSize不可大于Xmx
请参见其它的参数详解的文章,各参数值大小的本文不讨论.

没有更多推荐了,返回首页