分类目录归档:未分类

解决Tomcat对POST请求文件上传大小的限制

  在后台系统中对图片进行上传,图片路径已存入数据库,但在查询时图片并未展示出来,检查发现服务器并没有接收到此图片,后来发现图片大小为4.6MB,超过tomcat对http的post请求默认接收大小2M的限制。报错!

解决的方案:
  修改tomcat安装目录下的配置文件tomcat../conf/server.xml,找到里面的<Connector>标签,在该标签中添 加”maxPostSize”属性,将该属性值设置成你想要的最大值,单位是字节,或者把这个值设置为 -1(maxPostSize=”-1″),tomcat将不再检查POST的大小。即可解决上述问题。

  注意:7.0 以上版本 maxPostSize 设置为 -1,不是0

 

 

参见博客地址:https://blog.csdn.net/whatever8975757/article/details/60576188

 

Windows下如何查看某个端口被谁占用

1、 开始—->运行—->cmd,或者是window+R组合键,调出命令窗口;

2、输入命令:netstat -ano,列出所有端口的情况。在列表中我们观察被占用的端口,比如是1224,首先找到它;

3、查看被占用端口对应的PID,输入命令:netstat -aon|findstr “8081”,回车,记下最后一位数字,即PID,这里是9088;

4、 继续输入tasklist|findstr “9088”,回车,查看是哪个进程或者程序占用了8081端口,结果是:node.exe 或者是我们打开任务管理器,切换到进程选项卡,在PID一列查看9088对应的进程是谁,如果看不到PID这一列

javamail彻底解决中文乱码的方法

用javamail以来,一直被中文乱码困扰,虽然90%的邮件都正常,但是剩下10%的乱码确实让人心里疙疙瘩瘩。

通过代码subject = MimeUtility.decodeText(mimeMessage.getSubject());subject = MimeUtility.decodeText(subject);
获取的subject大部分都是正确的,但偶尔出现乱码,网上给出解决办法,
subject = new String(subject.getBytes(“ISO8859_1”), “GBK”),的确解决了乱码问题,但是以前正确的就变成了乱码。能不能只把乱码的进行转换,要想转换的话就必须知道是不是乱码,只有是乱码的情况下我们需要尝试用GBK转换。
那么如何知道是否有乱码呢?要是能知道subject的字符集就好了,但是这条路是行不通的,至少并不是完美的解决办法。
那么如何呢?
我以为只要有中文就可能存在乱码,那么如果subject中没有中文,就可以怀疑他是乱码,我们就尝试进行GBK转换
String regEx = “[\u4e00-\u9fa5]”;
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(subject);
if(!m.find()){
    subject = new String(subject.getBytes(“ISO8859_1”), “GBK”);
    subject = MimeUtility.decodeText(subject);
}
可能影响效率,但是确实管用。

Tomcat通过setenv.bat指定jdk和jre(相对路径)

1.在Tomcat的bin目录下,创建一个名为setenv.bat的文件。

2.编辑setenv.bat,

@echo off
rem set tmp variables SERVICE_ROOT

set BIN_DIR=%cd%
SET TITLE=%BIN_DIR%--"SERVICE NAME"
set curr=%cd%
cd ../..
set SERVICE_ROOT=%cd%
cd %BIN_DIR%

rem set JRE AND JDK
if exist "%SERVICE_ROOT%JDK8.0jrebinjava.exe" set "JRE_HOME=%SERVICE_ROOT%JDK8.0jre"
if exist "%SERVICE_ROOT%JDK8.0jrebinjava.exe" set "JAVA_HOME=%SERVICE_ROOT%JDK8.0jre"

set Path=%JRE_HOME%bin;%JAVA_HOME%bin;%Path%

ECHO %SERVICE_ROOT%
ECHO %JAVA_HOME%
ECHO %JRE_HOME%

 

 

  

JAVA_OPTS设置详解及Tomcat配置参数配置

1、文件位置
打开bin/catalina.bat文件

示例:

JAVA_OPTS=”-Xms256m -Xmx512m -Xss256K -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=test”

1)给出了对内存的配置。

2)以及spring boot 使用spring.profiles.active来分区配置。

项目的部署,开发环境、测试环境、预发布环境、生产环境的环境配置是不同的;比如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用profile在不同的环境下配置用不同的配置文件或者不同的配置.

Spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properyies通过spring.profiles.active来具体激活一个或者多个配置文件,如果没有没有指定任何profile的配置文件的话,spring boot默认会启动application-default.properties。

2、JAVA_OPTS设置
2.1、JAVA_OPTS ,顾名思义,是用来设置JVM相关运行参数的变量。

JVM:JAVA_OPTS=”-server -Xms2048m -Xmx2048m -Xss512k”

-server: 一定要作为第一个参数,在多个CPU时性能佳*。

-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些。

-Xmx:java heap最大值,使用的最大内存。

上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。

-XX:PermSize:设定内存的永久保存区域

-XX:MaxPermSize:设定最大内存的永久保存区域

-XX:MaxNewSize:

-Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.

+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。

-Xss:每个线程的Stack大小

-verbose:gc 现实垃圾收集信息

-Xloggc:gc.log 指定垃圾收集日志文件

-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一

-XX:+UseParNewGC :缩短minor收集的时间

-XX:+UseConcMarkSweepGC :缩短major收集的时间

提示:此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适。

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

2.2、在tomcat中redeploy时出现outofmemory的错误. 可以有以下几个方面的原因:

1) 使用了proxool,因为proxool内部包含了一个老版本的cglib.

2) log4j,最好不用,只用common-logging

3) 老版本的cglib,快点更新到最新版。

4) 更新到最新的hibernate3.2 3

3、实例演示
这里以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。

一、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大小修改TOMCAT_HOME/bin/catalina.sh 在“echo “Using CATALINA_BASE: $CATALINA_BASE””上面加入以下行: JAVA_OPTS=”-server -XX:PermSize=64M -XX:MaxPermSize=128m

建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

二、java.lang.OutOfMemoryError: Java heap space Heap size 设置 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 修改TOMCAT_HOME/bin/catalina.sh 在“echo “Using CATALINA_BASE: $CATALINA_BASE””上面加入

下行: JAVA_OPTS=”-server -Xms800m -Xmx800m -XX:MaxNewSize=256m”

三、下面给出1G内存环境下Java jvm 的参数设置 ,作为参考

JAVA_OPTS=”-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true “

 

四、不同启动方式配置方式

1.注册服务的启动方式(参照博客:https://www.cnblogs.com/JoePotter/p/11773317.html)

  注意:在注册服务前修改配置文件$TOMCAT_HOMEbinservice.bat

    

if "%SERVICE_STARTUP_MODE%" == "" set SERVICE_STARTUP_MODE=manual
if "%JvmMs%" == "" set JvmMs=2048
if "%JvmMx%" == "" set JvmMx=2048

  注册服务即可配置成功。

2.以startup.bat方式启动

 修改配置文件$TOMCAT_HOMEbincatalina.bat

 在第一行位置添加:set JAVA_OPTS=%JAVA_OPTS% -server -Xms2048m -Xmx2048m

操作系统性能观测工具

1.工具类型 

  性能观测工具可以按照系统级别和进程级别来分类,多数的工具要么基于计数器要么基于跟踪。我们把这些性能放在如下图中,包括一些常见工具作为示例

  有一些工具不止适合一个象限,例如:top还有一个系统级别的视图,Dtrace也有进程级别的能力。还有一些性能工具是基于剖析(profiling)的。对系统和进程做一系列快照,以此来进行观测。

 1.1计数器

   内核维护了各种统计数据,称为计数器,用于对事件计数。通常计数器实现为无符号的整型数,发生事件时递增。计数器的使用可以认为是“零开销”的,因为它们默认是开启的,而且始终由内核维护。

唯一的使用开销是从用户空间读取它们的时候(可以忽略不计)。

系统级别

下面这些工具利用内核的计数器在系统软硬件的环境中检查系统级别的活动。

 vmstat:虚拟内存和物理内存的统计,系统级别。

mpstat:每个CPU的使用情况。

iostat:每个I/O的使用情况,由块设备接口报告。

netstat:网络接口的统计,TCP/IP栈的统计,以及每个连接的一些统计信息。

sar:各种各样的统计,能归档历史数据。

这些工具通常是系统全体用户可见的(非root用户)。统计出的数据也常常被监控软件用来绘图。

进程级别

下面这些工具以进程为导向的,使用的是内核为每个进程维护的计数器。

ps:进程状态,显示进程的各种统计信息,包括内存和cpu的使用。

top:按一个统计数据(如CPU使用)排序,显示排名高的进程,基于Solaris的系统对应的工具是prstat(1M)

pmap:将进程的内存段和使用统计一起列出。

一般来说,上述的这些工具是从/proc文件系统里读取统计的信息的。

1.2 跟踪

       跟踪收集每一个事件的数据以供分析。跟踪框架一般默认是不启用的,因为跟踪捕获数据会有CPU的开销,另外还需要不小的存储空间来存放数据。

这些开销会拖慢所跟踪的对象,在解释测量时间的时候需要加以考虑。

     日志,包括系统日志,可以认为是一种默认开启的低频率的跟踪。日志包括每一个事件的数据,虽然通常只针对偶发事件,如错误和警告。

系统级别

利用内核功的跟踪设施,下面这些跟踪工具在系统软硬件的环境中检查系统级别的活动。

   tcpdump:网络包跟踪(用libpcap库)

   snoop:为基于Solaris的系统打造的网络包跟踪工具。

   blktrace:块I/O跟踪(Linux)

   iosnoop:块I/O跟踪(基于Dtrace)

   execsnoop:跟踪新进程(基于Dtrace)

   dtruss:系统级别的系统调用缓冲跟踪(基于Dtrace)

   Dtrace:跟踪内核的内部活动和所有资源的使用情况(不仅仅是网络和块I/O),支持静态和动态的跟踪。

   SystemTap:跟踪内核的内部活动和所有资源的使用情况,支持静态和动态的跟踪。

   perf:Linux性能事件,跟踪静态和动态的探针。

Dtrace和SystemTap都是可编程环境,在它们之上可以构建系统级别的跟踪工具

进程级别

 以进程为导向的,基于的是操作系统提供的框架。

  strace:基于Linux系统的系统调用跟踪。

  truss:基于Solaris系统的系统调用跟踪。

  gdb:源代码级别的调试器,广泛应用于Linux系统。

  mdb:Solaris系统的一个具有可扩展性的调试器。

调试器能够检查每一个事件的数据,不过做这件事情时需要停止目标程序的执行,然后再启动。

诸如:Dtrace、SystemTap和perf这样的工具,虽然更适合归纳到系统级别一类中,但是他们都支持对单个进程做检查。

1.3 剖析

 

Windows 7 设置允许多用户同时远程桌面连接

有时候我们服务器安装的是Win7系统,远程登录桌面时,即使登录的是不同的管理账号,还是会提示把远程登录的人给踢下来。即系统只允许存在一个远程会话窗,不管是不是相同的用户。

下面讲解如何设置Win7让多个账号的各自会话同时存在,且相互之间不冲突。

1、创建需要远程的账号。点击桌面计算机,右键—>管理—>本地用户和组—>用户—>新建用户

2、将新建用户添加到远程桌面组Remote Desktop Users

3、开启计算机远程。点击桌面计算机,右键—>属性—>远程设置—>勾上允许任意版本远程桌面的计算机连接

4、防火墙注意开放远程桌面端口

5、点击开始菜单—>运行—>输入“gpedit.msc”进入本地组策略编辑器

6、在本地组策略编辑器里面,依次展开计算机配置—>管理模板—>Windows组件—>远程桌面服务—>远程桌面会话主机—>连接—>限制连接的数量

7、打开限制连接数,这里未配置时,默认的最大连接数是1,点击已启用—>允许的RD最大连接数为该为20—>确定

8、下载一个UniversalTermsrvPatch,这是第三方工具,右键使用管理员身份运行UniversalTermsrvPatch-x64文件,点击破解即可

检验maven的配置是否生效或正确。

1.在控制台输入  mvn help:system

2.当控制台出现build success时,说明配置生效或正确。

这样本地仓库就配置成功了

 

相关问题:

1.执行上面的命令后提示:Unrecognized Windows Sockets error: 10106: create 的解决

    

按照步骤来吧
①以管理员身份打开命令提示符(win7附件中右键命令操作符选择管理员模式运行、win8或10可先菜单中搜索命令操作符然后右键…)
②运行 netsh winsock reset
③重启电脑

 

CTO、技术总监和技术经理有啥区别?

最近朋友圈上被CTO的故事刷的满屏都是,着实又火了一次。

大概是某个C轮融资的医疗网站CTO被离职。而CTO是一个知乎大V和微信大号。此事一出,在微信群有支持也有反对之声。支持此CTO被离职的认为其在工作时没有Review程序,自己不写代码,而是热衷出没于技术大会,写互联网圈的花边新闻。而CTO侧的原因是深度参与创业多年,期权回报到头来一场空。

你我都不是吃瓜群众,这事不同角色不同的利益点,肯定态度不一样。作为一个技术老司机,今天和大伙谈谈这三个角色到底有啥不同。

程序员

程序员,英文名coder/programmer,大家常自嘲叫码农的阶段。这个角色职责是把需求或产品实现为用户可用的软件产品。

此职位为执行级别。另外因为经验较少,一般需要求助别人,或与别人一起完(ban)成(zhuan)一个任务。

此阶段大概要经历3年,程序员的职责如下:

1、负责公司运营系统的设计与开发工作

2、运营数据处理和分析

高级程序员

高级程序员学名工程师。到了这个level,英文名可改叫做engineer或developer。此时你的功力开始增强,这与你平时的积累努力是分不开的,祝贺你~

此时的你不仅可以完成任务,开始注重代码的质量, 能够写出工业级的代码 。

你的经验可胜任模块级的系统设计,承担完成较为复杂的技术,能有效的自我管理,有帮助别人快速解决问题(trouble shooting)的能力。

此阶段你需要经历到7、8年左右的体验,中间要经历一段深刻自我历练的过程。

有时给人致命一击其实是心里的小蟊贼。一般人在5年前后遇到一个门槛,碰到天花板+彷徨期,或者你打心眼里不在喜欢编程,可尝试转为其它角色,如产品经理,售前售后支持等岗位,也不失为好选择。

当我们熬过这段儿,就会“山随平野尽,江入大荒流“,渐入佳境矣。

高级程序员定义软件功能、做开发计划推进和管理。可以带几个个帮手把产品规划的功能实现,你是团队中的”大手“,遇到难题也是你亲自攻艰克难。

所以,一个高级程序员,他的职责很清晰:

1、负责产品核心复杂功能的方案设计、编码实现

2、负责疑难BUG分析诊断、攻关解决

架构师

到了架构师级别,想必你已经学会降龙十八掌,可登堂入世,成为一位准(lao)专(you)家(tiao)。

我们大喊声:“单打独斗,老衲谁也不惧!“,遂开始领导一众技术高手,指点武功,来设计和完成一个系统,大多是分布式,高并发的系统架构平台。

架构师的任务是为公司产品的业务问题提供高质量技术解决方案。可能每条产品线都设置了架构师,也可能多条生产品线的的后端是由一个架构师设计的平台提供。

RBraUjm.png!web

通过上面架构师的部分成果,总结其职责如下:

1、需求分析:“知彼”有时比“知已”还重要。管理市场,产品等的需求,确立关键需求。坚持技术上的优秀与需求的愿景统一,提升技术负债意识,提供技术选项,风险预判,工期等解决方案。

2、架构设计:在产品功能中抽取中非功能的需求,由关键需求变成概念型架构。列出功能树,分层治之,如用户界面层、系统交互层,数据管理层。达成高扩展,高可用,高性能,高安全,易运维,易部署,易接入等能力。

3、功能设计与实现:对架构设计的底层代码级别实现。如公共核心类,接口实现,应用发现规则、接口变更等。

技术经理

人生就是不断上升的过程,你已经到达经理的层次了。如今的你,需要不断提高领导力,需要定期召开团队会议讨论问题。

首先我们要更加自信,在工作中显示自己的功力,给讲话增添力量。如:“本次项目虽然有很大的困难,我们也需苦战到底。当然示先垂范,身先士卒,方能成功!”

你需要和大家站在一起,因为人们也都有解决问题的能力,更需要有以下的能力与责任:

1、任务管理:开发工作量评估、定立开发流程、分配和追踪开发任务

2、质量管理:代码review、开发风险判断/报告/协调解决

3、效率提升:代码底层研发和培训、最佳代码实践规范总结与推广、自动化生产工具、自动化部署工具

4、技术能力提升:招聘面试、试题主拟、新人指导、项目复盘与改进

技术总监

如果一个研发团队超过20人,有多条产品线或业务量很大,这时已经有多个技术经理在负责每个业务,这时需要一位技术总监。

技术总监的职责:

1、组建平台研发部,与架构师共建软件公共平台,方便各条产品业务线研发。

2、通过技术平台、通过高一层的职权,管理和协调公司各个部门与本部门各条线。现在每个产品线都应该有合格的技术经理和高级程序员。

CTO

首席技术官,英文名Chief Technology Officer。是与CEO、COO、CFO同级的领导者,是技术和业务融合的领袖。

国内与国外对CTO的定义有些许不同。

美国对CTO的职责是设计公司三年内的产品和服务的技术发展方向,较少参与技术团队的日常管理和项目管理事务。基本是前瞻性的策略思维,比如Google的谢尔盖.布林一直保持对技术方向的敏锐,比如无人驾驶汽车,人工智能等走向。

在国内,CTO大部分则偏重于研发管理,相当于技术总监的Plus版。它相当于美国互联网公司常设的工程师副总裁+CTO的工作并集。但总体事情比美国的CTO层次低,大部分CTO的是领导技术团队开发各类产品,解决技术问题,管理不同的项目,排期交付。还有一部分的职能类似于架构师或总工程师,作为技术侧的权威,为下一步的发展方向 做研究探讨,为CEO提供建设型决定参考。

CTO的职责如下列表:

1、技术愿景:识别新技术、利用新技术、整合新技术、驱动新技术。驱动商业战略、驱动产品战略
2、技术架构:建立主营业务中的技术架构与实施模式,建立技术体系标准
3、流程制度:建立高质量,高效率的技术团队。健全的项目管理体系;完善的员工能力发展体系
4、知识培训:建立以研发内容为主的知识库管理体系、技术分享与技术文化的体系
5、业务支撑:与其它部门的沟通协作,如HR、市场、BD、财务、客服等提供技术管理接口;在产品技术层面能够领先于业内同行
6、影响力:在公司内部与行业中具备一定影响力与口碑
7、视野&格局&执行力:看待问题全面,具有强大的学习力,具备技术前瞻力,敏锐的市场嗅觉,战略落地的能力
小结

上面为大家描绘互联网技术团队的角色区分,我们一起来做一个小结:

CTO做的事情,是商业、产品、技术、管理、团队相平衡的综合统管,公司的技术研发方向与重点商业化的结果负责,激励员工,营造工程师文化。

而技术总监主要是协调团队内部各个资源,引入工具,和方法提升工作效率。

技术经理角色相对具体,绩效考核,产品落地,执行优胜劣汰的规则。

正像《少有人走的路》,每个人的成长路径都不同,但无一不是兴趣与使命驱动——无论你是程序员,技术经理,还是在CTO的角色。大家一起发挥潜力,去迎接不期而遇的挑战与胜利后的曼妙风光。