上传文件时tomcat崩溃

tcrct 2009-01-13 01:02:01
在项目中,我用到的tomcat是5.5的,在linux上跑。最近发现在上传文件时,如果连续上传10个左右,就会出现tomcat崩溃的情况。JVM的内存我已经设置成为512M的了。现将代码分别贴出,请各位帮忙看一看:(是SSH架构的)

jsp:

<form action="tArenamessage.do" name="tArenamemessageForm" id="tArenamemessageForm" method="POST" onSubmit="return checkForm('tArenamemessageForm');" enctype="multipart/form-data" >
...
<input type="file" name="file1" />
<input type="file" name="file2" />
<input type="file" name="file3" />
....
/form>

===============================

struts.xml:

<form-bean name="TArenamemessageForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="name" type="java.lang.String" />
...
<form-property name="file1" type="org.apache.struts.upload.FormFile" />
<form-property name="file2" type="org.apache.struts.upload.FormFile" />
<form-property name="file3" type="org.apache.struts.upload.FormFile" />
</form>
<!-- 场馆管理模块 -->
<action path="/tArenamessage" scope="request" type="org.springframework.web.struts.DelegatingActionProxy" validate="false" name="TArenamemessageForm" >
<forward name="service" path="/../WEB-INF/jsp/admin/jsp/tArenamessage.jsp"></forward>
</action>

====================================

aciton:

//保存
public boolean setBeanValueByDynaActionForm(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response){
this.myExecute(mapping, form, request, response);
DynaActionForm hzForm = (DynaActionForm) form;
...
FormFile localfile = null;
//外景照片
localfile = (FormFile)hzForm.get("file1");
if(localfile!=null) {this.upload(localfile, request, 6L);}

localfile = (FormFile)hzForm.get("file2");
if(localfile!=null) {this.upload(localfile, request, 6L);}

localfile = (FormFile)hzForm.get("file3");
if(localfile!=null) {this.upload(localfile, request, 6L);}

...
}
//上传文件
private void upload(FormFile localfile,HttpServletRequest request,long flag){
String finalFileName="";
if(localfile!=null) {
finalFileName = Upload.uploadAttachment( localfile , request);//上传文件
}
if(finalFileName != null && !finalFileName.equals("")){
uploadFile(localfile,request,finalFileName,flag);//保存到附件表
}
}

上传文件的类:
public class Upload {
public static String uploadAttachment( FormFile file , HttpServletRequest request){
if( SystemGlobal.uploadAccess[0].toString().indexOf(file.getContentType())>=0 && file.getFileSize() <= ( 2048 * (Integer.parseInt( SystemGlobal.uploadAccess[1].toString()) ))){ //是图片并且小于?k
String path = SystemGlobal.webDir(request) + SystemGlobal.uploadAccess[2] + System.getProperty("file.separator") + StringUtil.date2String() + System.getProperty("file.separator");
File dir = new File(path);
if(!dir.exists()){dir.mkdir();}
String filename = "";
if(!file.getFileName().equals("")){
try{
filename = StringUtil.time2String() + StringUtil.ramdom(4)+ "." + file.getFileName().substring(file.getFileName().length()-3) ;
InputStream stream = file.getInputStream();
FileOutputStream output = new FileOutputStream( path + filename );
int len = -1;
byte[] buf = new byte[102400];
while((len = stream.read(buf)) != -1){
output.write(buf,0,len);
}
output.close();
stream.close();
}catch(IOException e){Log.error( Upload.class , "upload write stream ha error:" + e);}
}
return filename;
}
return "";
}

==============================
tareamanage.hbm.xml 一对多,一个场馆可以有多个图片

<set name="TUploadfiles" inverse="false" cascade="save-update" fetch="subselect" lazy="false">
<cache usage="read-write"/>
<key>
<column name="OBJID" length="50" />
</key>
<one-to-many class="com.webaorta.comm.pojo.TUploadfile" />
</set>

====================================
大致上就是这些了,代码里是否存在不合理的地方而导致什么原因从而令到tomcat死掉了呢?tomcat里的logs也没有一点报错的信息可以看的。


后来我直接将其转换为open session in view模式,奇怪的是我在windows下可以运行(开发机),但在linux下就报session已经关闭这个错误的了。这又是为什么呢?(服务器是linux系统).

请各位高手帮忙看一看吧,如果搞不好这个可能会丢饭碗的。谢谢大家了。





...全文
681 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
money8899 2009-03-05
  • 打赏
  • 举报
回复
出现这种问题是 session 用完了没有关!!!!!!!!!!!!!!!!!!
axman 2009-02-17
  • 打赏
  • 举报
回复
自己写Upload,手工自理。

http://blog.csdn.net/axman/archive/2007/01/02/1472509.aspx
tcrct 2009-02-14
  • 打赏
  • 举报
回复
没有人回答一下了吗?
tcrct 2009-01-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 axman 的回复:]
JVM内部崩溃,所以不可能有日志的,因为崩溃时TOMCAT已经不工作了。
这样的处理方式即时免强工作,一个人访问时可以上传,估计两个人三个人还是崩溃。
更别说有十几二十个人了,内存持有时候是正常的上传处理几百倍,也就是就上传逻辑而言你的性能只能达到别人的几百分之一。
[/Quote]

你有什么好的方法或建议吗?
chinagavin 2009-01-17
  • 打赏
  • 举报
回复
接分
zishizhilong 2009-01-15
  • 打赏
  • 举报
回复
做个记号,关注~
tcrct 2009-01-15
  • 打赏
  • 举报
回复
说了没日志输出,如果有日志输出的话,起码知道一个大概。可惜现在是没有的。文件很少的,几百K的图片。就是多,可能一下子输10张8张这样。

大家都看看吧。真的很急!
axman 2009-01-15
  • 打赏
  • 举报
回复
JVM内部崩溃,所以不可能有日志的,因为崩溃时TOMCAT已经不工作了。
这样的处理方式即时免强工作,一个人访问时可以上传,估计两个人三个人还是崩溃。
更别说有十几二十个人了,内存持有时候是正常的上传处理几百倍,也就是就上传逻辑而言你的性能只能达到别人的几百分之一。
shmilyhe 2009-01-15
  • 打赏
  • 举报
回复
没看出有什么逻辑的问题。你试一下在每次关闭流之后都在后台输出提示
建议,把close()这些操作放到finally{}里面去
ldxfsh 2009-01-14
  • 打赏
  • 举报
回复
就只有出错记录了日志,其他每个方法加几行日志吧,把日志加了看看程序运行到什么地方出的问题,就好解决了,最好的话把每个上传的文件大小也在日志里面输出来.
kokobox 2009-01-13
  • 打赏
  • 举报
回复
你上传多大的文件? 单个超过500M?

把异常信息贴出来看看



tcrct 2009-01-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tzb08 的回复:]
引用 4 楼 tcrct 的回复:
tomcat的logs文件夹里的cxx.out文件里是没有一点相关的信息的。所以没有什么崩溃的信息可看。

难就难在你没信息出来,不知道你log的信息级别设的什么
[/Quote]

log的级别是默认的,没设置过。

我估计是内存占用了,一直没释放的可能,不知道那位大侠有一些可以查看jvm内存的工具,用java自带的那个jconXXX的那个,看了半天,没看出有异常的情况。一边测试一边看,直到崩溃了也没什么看得出来。

wj_18 2009-01-13
  • 打赏
  • 举报
回复
估计是系统权限的问题,没法往硬盘临时空间写缓存,流都在内存了,应该就会崩溃
wula0010 2009-01-13
  • 打赏
  • 举报
回复
我用fileupload,还没碰到过这样的问题。
海会圣贤 2009-01-13
  • 打赏
  • 举报
回复
上传文件,服务器会崩溃,太牛了...

应该不是程序的问题吧,一般来说应该是系统的问题.
duoduo6153 2009-01-13
  • 打赏
  • 举报
回复
没有提示,很难说明原因。或者你用apache-commons-fileupload组件改写上传文件部分试试看。
glglglglglgllll 2009-01-13
  • 打赏
  • 举报
回复
总有个提示吧?崩溃了?
tzb08 2009-01-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tcrct 的回复:]
tomcat的logs文件夹里的cxx.out文件里是没有一点相关的信息的。所以没有什么崩溃的信息可看。
[/Quote]
难就难在你没信息出来,不知道你log的信息级别设的什么
tcrct 2009-01-13
  • 打赏
  • 举报
回复
tomcat的logs文件夹里的cxx.out文件里是没有一点相关的信息的。所以没有什么崩溃的信息可看。
老紫竹 2009-01-13
  • 打赏
  • 举报
回复
崩溃的信息呢???贴上来看看!
加载更多回复(2)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧