JVM内存设置多大合适?Xmx和Xmn如何设置?

问题: 新上线一个java服务,或者是RPC或者是WEB站点, 内存的设置该怎么设置呢?设置成多大比较合适,既不浪费内存,又不影响性能呢?   分析: 依据的原则是根据Java Performance里面的推荐公式来进行设置。   具体来讲: Java整个堆大小设置,Xmx 和 Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍 永久代 PermSize和MaxPermSize设置为老年代存活对象的1.2-1.5倍。 年轻代Xmn的设置为老年代存活对象的1-1.5倍。 老年代的内存大小设置为老年代存活对象的2-3倍。   BTW:      1、Sun官方建议年轻代的大小为整个堆的3/8左右, 所以按照上述设置的方式,基本符合Sun的建议。       2、堆大小=年轻代大小+年老代大小,...

QEMU/KVM虚拟机安装配置

1、安装相关组件:   [root@KVM ~]# yum install qemu-img qemu-kvm qemu-kvm-tools virt-manager virt-viewer virt-v2v virt-top libvirt libvirt-python libvirt-client python-virtinst bridge-utils tunctl 相当于如下命令: [root@KVM ~]# yum install qemu-img...

nginx应用总结(2)–突破高并发的性能优化

在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题。今天这里简单梳理下nginx性能优化的配置(仅仅依据本人的实战经验而述,如有不妥,敬请指出~) 一、这里的优化主要是指对nginx的配置优化,一般来说nginx配置文件中对优化比较有作用的主要有以下几项:1)nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数。worker_processes 8;2)为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;3)下面这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是系统的最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。worker_rlimit_nofile 65535;4)使用epoll的I/O模型,用这个模型来高效处理异步事件use epoll;5)每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。worker_connections 65535;6)http连接超时时间,默认是60s,功能是使客户端到服务器端的连接在设定的时间内持续有效,当出现对服务器的后继请求时,该功能避免了建立或者重新建立连接。切记这个参数也不能设置过大!否则会导致许多无效的http连接占据着nginx的连接数,终nginx崩溃!keepalive_timeout 60;7)客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。client_header_buffer_size 4k;8)下面这个参数将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。open_file_cache max=102400 inactive=20s;9)下面这个是指多长时间检查一次缓存的有效信息。open_file_cache_valid 30s;10)open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。open_file_cache_min_uses 1; 11)隐藏响应头中的有关操作系统和web server(Nginx)版本号的信息,这样对于安全性是有好处的。server_tokens...

nginx应用总结(1)–基础认识和应用配置

在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结。 一、nginx服务简介Nginx是一个高性能的HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP代理服务器。Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。 使用 Nginx 前必须了解的事项:1)目前官方 Nginx 并不支持 Windows,您只能在包括 Linux、UNIX、BSD 系统下安装和使用;2)Nginx 本身只是一个 HTTP 和反向代理服务器,它无法像 Apache 一样通过安装各种模块来支持不同的页面脚本,例如 PHP、CGI 等;3)Nginx 支持简单的负载均衡和容错;4)支持作为基本 HTTP 服务器的功能,例如日志、压缩、Byte ranges、Chunked responses、SSL、虚拟主机等等,应有尽有。 Nginx工作原理:Nginx由内核和一系列模块组成,内核提供web服务的基本功能,如启用网络协议,创建运行环境,接收和分配客户端请求,处理模块之间的交互。Nginx的各种功能和操作都由模块来实现。Nginx的模块从结构上分为核心模块、基础模块和第三方模块。1)核心模块:...

单机多实例的tomcat+supervisor配置方法

新公司,开发用java,跑在tomcat里,一台机器会跑多个tomcat,原来的运维人员是复制了多份tomcat放到目录下。这样做我觉得管理不方便,遂改为superviosr来控制,同时将tomcat本身与工程文件分开放置。即一台主机只有一份tomcat可执行文件,这样也方便以后升级tomcat,下边简要流水账一下,不解释细节,都能看懂。另外,我把安装过程写成了ansible playbook,需要的可以去我的github上下载,https://github.com/polygun2000   1.安装Server JRE ]# mkdir /usr/local/java/ ]# tar xvzf server-jre-8u121-linux-x64.tar.gz –strip-components=1 -C /usr/local/java   2.安装supervisor 可以用yum直接安装,epel源中有,不过版本比较低。 推荐的方式是使用pip安装,需要机器能访问internet。 如果不能访问internet,可以在能访问的机器上直接下载源码,复制过来后解压,用python setup.py install方式安装。 注意:supervisor依赖meld3,但是pip安装的meld3有可能版本太低,启动supervisor会报错,可以下载meld3-1.0.2.tar.gz,采用python setup.py install方式手工安装。 ]# pip...

在CentOS7 开发与部署 asp.net core app笔记

在 CentOS7 开发与部署 asp.net core app笔记 说明:我用的虚机是qcloud上的,其它云服务商的CentOS可能配置不同,或者网络环境不同。 在QCloud CentOS7 开发与部署 asp.net core app大致有如下几布: 1. 安装dotnet core 2. 开发第一个asp.net core app 3. 安装配置Nginx 4. 配置自启动守护程序 一. 安装dotnet core 0. CentOS上运行dotnet...

进程管理supervisor的简单说明

背景:       项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup、&、screen来实现,带着能否做一个start/stop/restart/reload的服务启动的想法找到里Supervisor。关于supervisor的介绍在网上大致搜索总结如下:       Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。 说明: 1,安装 1:easy_install 安装: easy_install supervisor 2:pip 安装: pip install supervisor 3:Debian / Ubuntu可以直接通过apt安装: apt-get install...

在Centos7下安装与部署.net core

个人安装流程,参照文档 https://www.cnblogs.com/Burt/p/6566642.html https://www.microsoft.com/net/learn/get-started/linux/centos#install 你可以按照第一个链接里的方式安装,但是我在官网上下载tar包自行安装时经常缺少文件,导致安装失败。 所以我建议你在配置环境的时候,按照官网上写的流程来做。 ——————————————————————————————- 首先,安装libicu依赖 执行下方命令行 yum install libunwind libicu 第二步,Add the dotnet product feed按照微软官网上的流程执行下面两行命令 sudo rpm --import https://packages.microsoft.com/keys/microsoft.ascsudo sh -c 'echo -e...

CentOS7——supervisor安装配置实战

介绍 Supervisor是一个进程控制系统。 它是一个C/S系统,服务端是supervisord进程,控制端使用supervisorctl来进行控制启动进程。同时它也提供了一个web界面,来可以使我们方便的进行进程的控制和查看日志信息。supervisord和supervisorctl类似于centos7上的systemd和systemctl的关系,但是又和systemd不同, 你的Nginx,Tomcat,memcache,Redis…会崩么? 那你自己写的服务器监测脚本呢? 好吧、不要再纠结了、交给Supervisor吧! 它会帮你维护这些、即使它们不小心崩了、Supervisor会帮你看住它们、维护它们,重启它们。 一、安装 安装环境:CentOS7.3 yum install python-setuptools easy_install supervisor #或者是 pip install supervisor supervisor安装完成后会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf,分别是supervisor的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序。 二、配置 输出supervisor配置,可以使用echo_supervisord_conf,我们将其重定向到文件中,然后就可以修改其配置项了。 运行supervisord服务的时候,需要指定supervisor配置文件,如果没有显示指定,默认在以下目录查找: ###$CWD表示运行supervisord程序的目录。 $CWD/supervisord.conf $CWD/etc/supervisord.conf /etc/supervisord.conf...