2005/12/22

[Info] MaxPermSize and how it relates to the overall heap

MaxPermSize and how it relates to the overall heap

Many people have asked if the MaxPermSize value is a part of the overall -Xmx heap setting or additional to it. There is a GC document on the Sun website which is causing some confusion due to a somewhat vague explanation and an errant diagram. The more I look at this document, the more I think the original author has made a subtle mistake in describing -Xmx as it relates to the PermSize and MaxPermSize.

First, a quick definition of the "permanent generation".

"The permanent generation is used to hold reflective data of the VM itself such as class objects and method objects. These reflective objects are allocated directly into the permanent generation, and it is sized independently from the other generations." [ref]



Yes, PermSize is additional to the -Xmx value set by the user on the JVM options. But MaxPermSize allows for the JVM to be able to grow the PermSize to the amount specified. Initially when the VM is loaded, the MaxPermSize will still be the default value (32mb for -client and 64mb for -server) but will not actually take up that amount until it is needed. On the other hand, if you were to set BOTH PermSize and MaxPermSize to 256mb, you would notice that the overall heap has increased by 256mb additional to the -Xmx setting.

So for example, if you set your -Xmx to 256m and your -MaxPermSize to 256m, you could check with the Solaris 'pmap' command how much memory the resulting process is taking up.

i.e.,

$ uname -a
SunOS devnull 5.8 Generic_108528-27 sun4u sparc
SUNW,UltraSPARC-IIi-cEngine

$ java -version
java version "1.3.1_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_02-b02)
Java HotSpot(TM) Client VM (build 1.3.1_02-b02, mixed mode)

---------------------------------------------
$ java -Xms256m -Xmx256m -XX:MaxPermSize=256m Hello &
$ pmap 6432
6432: /usr/java1.3.1/bin/../bin/sparc/native_threads/java -Xms256m -Xmx256m

total 288416K
---------------------------------------------
Notice above that the overall heap is not 256m+256m yet? Why? We did not specify PermSize yet, only MaxPermSize.


---------------------------------------------
$ java -Xms256m -Xmx256m -XX:PermSize=256m -XX:MaxPermSize=256m Hello &
$ pmap 6472
6472: /usr/java1.3.1/bin/../bin/sparc/native_threads/java -Xms256m -Xmx256m

total 550544K
---------------------------------------------

Now we see the overall heap grow, -Xmx+PermSize. This shows conclusive proof that PermSize and MaxPermSize are additional to the -Xmx setting.


Link

2005/12/13

[Troubleshooting] Managed Server cannot boot after password of admin user has been changed from admin console

DESCRIPTION:
If you change the password of the admin user from the admin console without running managed servers, the managed servers cannnot boot because of an authentication error of the admin user.

Resolution:
Security data e.g., password) is stored in the Embedded LDAP by default and it is replicated from the admin server to the managed servers. If there is an inconsistency of the security data between the admin and managed servers, the error will occur.
In order to refresh all replicated data at boot time, you need to set 'Refresh Replica At Startup' from the Admin Console. You can set this property by following the following steps in the Admin console:
Domain --> Security --> Embedded LDAP Server.

2005/12/04

[Info] Spring PropertyPlaceholderConfigurer

How many times have you been on a project, and people are talking about where to share configuration data?

Do I use some constants? What about a config file (XML, properties, etc)?

Sometimes it isn't easy to know what to do, and you sometimes end up with duplicate information.

For example, what if you want to share database information between your code, your ant build, and anything else?

With Spring, you can use their really nice PropertyPlaceholderConfigurer, and easily share a properties file. You can simply share one properties file for all of your build info as well as Spring sharing, or you can of course seperate things out, and have multiple 's in your build script.

So, the steps for sharing the data:......

http://www.almaer.com/blog/archives/000449.html

2005/11/29

[novelty] lipstick indicator & Lipstick Theory

lipstick indicator
An indicator based on the theory that a consumer turns to less-expensive indulgences, such as lipstick, when she (or he) feels less than confident about the future. Therefore, lipstick sales tend to increase during times of economic uncertainty or a recession.


Lipstick Theory

This theory is also applied in medical industry.
"The Lipstick Theory: When a woman who is battling cancer starts to put on lipstick, she is on the road to recovery."
- William Cahan, M.D., Memorial Sloan Kettering Cancer Center

2005/11/23

Is Ajax gonna kill the web frameworks?

The Java eco system has zillions of web frameworks from JSF, Tapestry, Struts, WebWork, Spring WebFlow to things like JSP/JSTL/Velocity etc. There's probably a new web framework born every day in Java some place.

However if the world really does go Ajax or some kinda client technology very Ajax like - will that cause these traditional HTML/HTTP web frameworks to become legacy?

Web frameworks spend most of their time doing things like, dealing with HTTP and HTML, maintaining client side state on the server - handing intermediate form submissions & validation, templating/rendering issues and binding business objects to HTML form controls etc.

These days Ajax has template engines, XPath/XSLT engines, SOAP stacks, XForms implementations and so forth all done on the client side. You can do clever things like hide the JavaScript from your HTML page and use CSS to bind the JavaScript to the markup.

There's even a JavaScript version of Ruby on Rails that runs in the browser! :)

So is the web application of the future going to be static HTML & JavaScript, served up by Apache with Ajax interacting with a bunch of XML based web services (maybe using SOAP, maybe just REST etc)? If so, do we really need a web framework thats focussed on HTTP and HTML, or are we just gonna end up developing a bunch of XML based web services and letting Ajax do all the templating, editing and viewing?

Is this the end of web frameworks as we know it?

http://radio.weblogs.com/0112098/2005/11/16.html

2005/11/12

[Info] Linux 常用指令

殺光folder下所有檔案
rm -rf

解開tar檔到特定folder下
tar xvf project.tar -C

看目前的process
ps -ef

重開機
init 6

檢視Log
tail -f

解開gz檔
tar -zxvf jrockit-70sp5-j2se131-linux32.tar.gz

[Troubleshooting] java.lang.SecurityException: Unable to locate a login configuration

Environment
RedHet Enterprise Linux 2.1
WLS 6.1
Service Pack 7
JRocket 1.4

Problem
As I would like to startup weblogic, it will show this kind of error message
java.lang.SecurityException: Unable to locate a login configuration
at com.ibm.security.auth.login.ConfigFile.getAppConfigurationEntry(ConfigFile.java:221)
at javax.security.auth.login.LoginContext.init(LoginContext.java:171)
at javax.security.auth.login.LoginContext.(LoginContext.java:318)
at weblogic.security.internal.ServerAuthenticate.main(ServerAuthenticate.java:81)
at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:200)
at weblogic.Server.main(Server.java:35)

Solution
You can check this file http://www.genuitec.com/products/JDK14_WLS61.pdf
Owing to the certified JDK version in WLS 6.1 is 1.3, the JDK version is 1.4

2005/11/11

[Info] Java Performance Tuning

http://www.javaperformancetuning.com/

[Info] WebLogic Server End-of-Life Calendar

You can check this link to ensure your product's status:
WebLogic Server End-of-Life Calendar


If it was retired, BEA do not provide technical support any more.

[Info] Hardware Capacity Management How-To

When you examine performance, a number of factors influence how much capacity a given hardware configuration will need in order to support WebLogic Server and a given application. The hardware capacity required to support your application depends on the specifics of the application and configuration. You should consider how each factor applies to your configuration and application.

Before continuing with this section, you may want to review the Standard Performance Evaluation Corporation which provides a set of standardized benchmarks and metrics for evaluating computer system performance.

2005/11/07

[Troubleshooting] Apache HTTP Server cannot start

[Scenario]
有些時候,可能因為改了某些設定,如修改httpd.conf之後無法正常啟動

[Solution]
此時你可以執行Test Configuration來看錯誤訊息
開始→程式集→Apache HTTP Server→Configure Apache Server→Test Configuration

2005/11/01

[Info] Comparing Web Frameworks Struts, Spring MVC, WebWork, Tapestry & JSF

File Type:PDF
Comparing Web Frameworks Struts, Spring MVC, WebWork, Tapestry & JSF

[Info] Two Approaches to Open New Window

按icon與用File/New/Window的動作不一樣, 按Icon的話, 是起一個新的session, 後者的話, 是share同一個session
這裡有一個link: from JavaWorld
除此之外, 用icon, 與用File/New/Window, 後者可能會有一些問題, 可參考此link:experts-exchange

2005/10/31

[Troubleshooting] SQLException: IO 異常: The Network Adapter could not establish the connection

錯誤訊息
SQLException: IO 異常: The Network Adapter could not establish the connection

成因
1. 資料庫沒有開啟, 所以無法連接上
2. 因為防火牆的原因, 該台連不上DBMS Server, 可先ping看看可否ping的到, ex. ping xxx.xxx.xxx.xxx 1521

2005/10/30

[Troubleshooting] 530 Sorry, no ANONYMOUS access allowed

Scenario
用Server-U架起一個FTP Server,建立username=ftp, password=ftptest
此時用其他的ftp連線工具連線的時候,會出現此錯誤訊息: 530 Sorry, no ANONYMOUS access allowed

原因
因為ftp是保留字,不可以將其當成username,要將username改成其他名字即可

2005/10/28

[Info] JavaMail

Spring Framework also provide an abstract layer for JavaMail.
Here has a reference link:
Sending Email with Spring mail abstraction layer

Here has sample code which write by me:

package albert.guo.util;



import java.io.File;

import java.util.ArrayList;

import java.util.HashMap;



import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;



import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSenderImpl;

import org.springframework.mail.javamail.MimeMessageHelper;



/**

*

* @author Albert

*

*/

public class MailUtil {



private String addr[];

private String subject;

private String text;

private String host;

private String filepath;

private String filename;

private ArrayList fileList;



public MailUtil(String iAddr[], String iSubject, String iText, String iHost){

this.addr = iAddr;

this.subject = iSubject;

this.text = iText;

this.host = iHost;

}



public MailUtil(String iAddr[], String iSubject, String iText, String iHost,

ArrayList iFileList){

this.addr = iAddr;

this.subject = iSubject;

this.text = iText;

this.host = iHost;

this.fileList = iFileList;

}



/*

* 發送mail(不含附加檔案)

*/

public void sendMsg(){

SimpleMailMessage msg = new SimpleMailMessage();

msg.setTo(this.addr);

msg.setSubject(this.subject);

msg.setText(this.text);



JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

mailSender.setHost(this.host);

mailSender.send(msg);

}



/*

* 發送mail(含附加檔案)

*/

public void sendMsgAndAttachment(){

JavaMailSenderImpl sender = new JavaMailSenderImpl();

sender.setHost(this.host);



MimeMessage message = sender.createMimeMessage();



try {

//use the true flag to indicate you need a multipart message

MimeMessageHelper helper = new MimeMessageHelper(message, true);

helper.setTo(this.addr);

helper.setSubject(this.subject);

helper.setText(this.text);



for(int i=0; i<this.fileList.size(); i++){

HashMap attachment = (HashMap)fileList.get(i);

String filepath = (String)attachment.get("filepath");

String filename = (String)attachment.get("filename");

helper.addAttachment(filename, new File(filepath+filename));

}

sender.send(message);

} catch (MessagingException e) {

e.printStackTrace();

}

}



public static void main(String[] args) {

String addr[] = new String [] {"albertg@systex.com.tw"};

//MailUtil mailUtil = new MailUtil(addr, "標題", "內容\n啦啦啦", "mail.systex.com.tw");

//mailUtil.sendMsg();

ArrayList list = new ArrayList();

HashMap hm1 = new HashMap();

hm1.put("filepath", "C:/");

hm1.put("filename","test.doc");

HashMap hm2 = new HashMap();

hm2.put("filepath", "C:/");

hm2.put("filename", "LiveABC.Log");

list.add(hm1);

list.add(hm2);

MailUtil mailUtil = new MailUtil(addr, "標題", "內容\n啦啦啦", "mail.systex.com.tw",
list);

mailUtil.sendMsgAndAttachment();

}



}

 

2005/10/20

[Troubleshoot] JDBC Connection Leak

資料庫連線洩漏原因

在JSP中設定ErrorPage時,發生跳轉,來不及關閉連線
程式的錯誤處理非在finally區塊關閉連線



緩解方式

設定InactiveConnectionTimeoutSeconds時間
最終一定要修復程式中的問題

2005/10/07

[Info] 如何在IE中直接打開WORD等文件

Q.
如何在一个WEB APPLICATION中打開WORD,EXCEL等類型的文件?

ans.

為了讓能在IE流覽器中自動打開的設置:需要在WEB.XML中進行如下的設置:在WEB.XML中添加<mime-mapping>,其中:


<extension>:
文件的副檔名

<mime-type>:
除了該類型檔的可執行檔,WINDOW註冊表中的

/HKEY_CLASSES_ROOT下該類檔的Content
Type
的值一樣.

如能在IE中自動打開DOCXLSPDF檔的配置如下:

<?xml version="1.0" ?>

<!DOCTYPE web-app PUBLIC "-//Sun
Microsystems, Inc.//DTD Web Application 1.2//EN"


"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>

<mime-mapping>

<extension>doc</extension>

<mime-type>application/msword</mime-type>

</mime-mapping>

<mime-mapping>

<extension>xls</extension>

<mime-type>application/msexcel</mime-type>

</mime-mapping>

<mime-mapping>

<extension>pdf</extension>

<mime-type>application/pdf</mime-type>

</mime-mapping>

</web-app>